// JavaScript Document

//document.captureEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP);
//document.onclick = clickHandler;

var PageDetails=new Array();
var PageRef=new Array();
var PageRefIDs=new Array();
PageRefCount=0;
var COCount=0;
var CurrentPage=0;
var TheCurrentPageName="";
var CurrentTemplate="";
var CurrentGetString="";
var PostActionUrl="";
var CurrentPostVars="";
var http = createRequestObject();
var LoadPagesObject=Array();
var httpPost = createRequestObject();
var Error;
var PageCache=Array();
var browser = navigator.appName; //find the browser name




//============================================
//====loading animation object
//============================================
function StopAnimation(){
	var Target=document.getElementById(this.LoadingIcon);
	if(Target!=null){
		Target.style.display="none";
	}
	this.CurrentStep=0;
}
function StartAnimation(){
	this.CompleteStep();
	var Target=document.getElementById(this.LoadingIcon);
	if(Target!=null){
		Target.style.display="";
	}
	
}
function CompleteAStep(){
	//alert(CurrentStep+"-"+this.totalsteps);
	this.CurrentStep++;
	var Percent=Math.ceil(this.CurrentStep/this.totalsteps*100);
	var TargetText=document.getElementById(this.LoadingText);
	if(!IsNumeric(Percent)){
		Percent=0;	
	}
	
	if(TargetText!=null){
		TargetText.innerHTML="Loading.."+Percent+"%";
	}
	if(this.CurrentStep==this.totalsteps){
		// final thing to do turn off loading icon
		this.astop();	
	}
}
function LoadingAnimation(){
	this.totalsteps=0;
	this.CurrentStep=0;
	this.LoadingIcon="LoadingIcon";
	this.LoadingText="LoadingText";
	this.astart=StartAnimation;
	this.astop=StopAnimation;
	this.CompleteStep=CompleteAStep;
}
var Loading=new LoadingAnimation();

function LoadPagesInit(){
	//alert("hello");
	if (!this.req) {
		try {
		 // Try to create object for Firefox, Safari, IE7, etc.
		 this.req = new XMLHttpRequest();
		}
		catch (e) {
			try {
			// Try to create object for later versions of IE.
				this.req = new ActiveXObject('MSXML2.XMLHTTP');
			}
			catch (e) {
				try {
				 // Try to create object for early versions of IE.
				 	this.req = new ActiveXObject('Microsoft.XMLHTTP');
				}
				catch (e) {
				 // Could not create an XMLHttpRequest object.
				 	return false;
				}
			}
		}
	}
	return this.req;
}

function LoadPagesDoRequest(){
	 if (!this.init()) {
	   alert('Could not create XMLHttpRequest object.');
	   return;
	 }
	 //alert(this.url);
	 this.req.open(this.method, this.url, this.async);
	 //alert(this.method+"-"+this.url+"-"+this.async);
	 if(this.method=="POST"){
		this.req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
	 }
	 var self = this; // Fix loss-of-scope in inner function
	 this.req.onreadystatechange = function(){
									if (self.req.readyState == 4) {
										var res=self.req.responseText;
										var SArr=res.split("`~`");
										//alert(res);
										if(SArr[1]!=null){
											Loading.CompleteStep();
											if(SArr[1]=='Success'){
												var TargetCO=document.getElementById('CO'+SArr[2]);
												if(PageCache[CurrentPage]==null){
													PageCache[CurrentPage]=Array();
												}
												PageCache[CurrentPage][SArr[2]]=SArr[4];
												if(TargetCO!=null){
													//alert(TargetCO.innerHTML);
													TargetCO.innerHTML =SArr[4];
												}else{
													//alert(PageDetails[CurrentPage]['COs'][COCount]);
												}
												if(SArr[3]!=""){
													//alert(res);
													//alert(SArr[0]+"-"+SArr[3]);
													dhtmlLoadScript(SArr[3]);
												}
												//COCount++;
												//LoadPage(CurrentPage);
											};
											if(SArr[1]=='Cached'){
												var TargetCO=document.getElementById('CO'+SArr[2]);
												TargetCO.innerHTML =PageCache[CurrentPage][SArr[2]];
												//COCount++;
												//LoadPage(CurrentPage);
											}
											if((SArr[1]!='Success')&&(SArr[1]!='Cached')){
												//alert("-"+SArr[0]+"-");
												LoadPageNormally();	
											}
											Startup();
											
										}else{
											//alert("="+SArr[0]+"=");
											LoadPageNormally();	
										}
								   }
								 }
	
	 this.req.send(this.postData);
}



function LoadPages(){
	//alert("init");
	this.CONum="";
	this.url="";
	this.method="GET";
	this.postData=null;
	this.async = true; 
	this.init=LoadPagesInit;
	this.doReq = LoadPagesDoRequest;	
	
}

//==========================================
//===== For GET requests
//==========================================

function LoadPageNormally(){
	var Url="/site/normal/"+TheCurrentPageName+"/"+CurrentGetString;
	document.location.href=Url;
}

function LoadPage(PageID){
	//alert(PageDetails[PageID]['COs'][COCount]+" "+MaxCOs[CurrentTemplate]+" "+CurrentTemplate);
	if(COCount<MaxCOs[CurrentTemplate]){
		if(PageDetails[PageID]['COs'][COCount]==null){
			
			COCount++;
			LoadPage(CurrentPage);
		}else{
			
			if(PageDetails[PageID]['COs'][COCount]!=""){
				var TheUrl="/site/GETCO"+PageDetails[PageID]['COs'][COCount]+"/"+PageDetails[PageID]['PageName']+"/"+CurrentGetString;
				//httpArray[COCount]=createRequestObject();
				//httpArray[COCount].open('get', TheUrl);
				//httpArray[COCount].onreadystatechange = COResponse; 
				//httpArray[COCount].send(null);
				
				LoadPagesObject[PageDetails[PageID]['COs'][COCount]]= new LoadPages();
				LoadPagesObject[PageDetails[PageID]['COs'][COCount]].CONum=PageDetails[PageID]['COs'][COCount];
				LoadPagesObject[PageDetails[PageID]['COs'][COCount]].url=TheUrl;
				LoadPagesObject[PageDetails[PageID]['COs'][COCount]].doReq();
				
				COCount++;
				LoadPage(PageID);
			}else{
				
				COCount++;
				LoadPage(CurrentPage);
			}
		}
		
	}else{
		//finished
		for(x=1;x<=MaxCOs[CurrentTemplate];x++){
			if(!PageDetails[PageID]['COs'].contains(x)){
				var TargetCO=document.getElementById('CO'+x);
				if(TargetCO!=null){
					TargetCO.innerHTML ="";
				}
			}else{
				
			}
		}
		
	}
}

function createRequestObject(){
	var request_o; //declare the variable to hold the object.
	
	if(browser == "Microsoft Internet Explorer"){
		// Create the object using MSIE's method 
		request_o = new ActiveXObject("Microsoft.XMLHTTP");
	}else{
		// Create the object using other browser's method 
		request_o = new XMLHttpRequest();
	}
	return request_o; //return the object
}

function UpdateContentObjects(TheUrl){
	
	tmpServerArr=document.location.href.split("/");
	
	var Server=tmpServerArr[2];
	if(TheUrl.indexOf(Server)==-1){//
		return true;
	}else{
		SendIFrame(TheUrl);
		Loading.astart();
		
		var TUrl=TheUrl;
		var tmpArr=new Array;
		tmpArr=TUrl.split("/");
		var TargetUrl="";
		CurrentGetString="";
		//alert(tmpArr[4]);
		if(tmpArr[4]==null) return true;
		for(x=0;x<tmpArr.length;x++){
			
			if(x>2){
				if(tmpArr[x].substr(0,1)!="?"){
					if(x==4){
						TargetUrl+="/GETALLCOS";
					}else if(x==5){
						AddHash(tmpArr[x]);	
						TargetUrl+="/"+tmpArr[x];
					}else{
						if(x>5){
							
							CurrentGetString+=tmpArr[x]+"/"
						}
						TargetUrl+="/"+tmpArr[x];
					}
				}
			}else{
				TargetUrl+=tmpArr[x];
				if(x<2) TargetUrl+="/";
			}
		}
		
		http.open('get', TargetUrl);
		http.onreadystatechange = Response; 
		http.send(null);
		return false;
	}
}

function UpdateContentObjectsBack(){
	Loading.astart();
	var PName=PageDetails[CurrentPage]['PageName'];
	var TargetUrl="/site/GETALLCOS/"+PName+"/";
	AddHash(PName);
	http.open('get', TargetUrl);
	http.onreadystatechange = Response; 
	http.send(null);
	return false;
}
function UpdateContentObjectsFromStartHash(ThePageName){
	Loading.astart();
	var TargetUrl="/site/GETALLCOS/"+ThePageName+"/";
	http.open('get', TargetUrl);
	http.onreadystatechange = Response; 
	http.send(null);
	return false;
}

function Response(){
	
	// Make sure that the transaction has finished. The XMLHttpRequest object 
	//	has a property called readyState with several states:
	//	0: Uninitialized
	//	1: Loading
	//	2: Loaded
	//	3: Interactive
	//	4: Finished 
	if(http.readyState == 4){ //Finished loading the response
		var res=http.responseText;
		//alert(res);
		if(res!=null){
			var CODetailsArr=res.split('`~`');
			if(CODetailsArr[1]!=null){
				var DetailsArr=CODetailsArr[0].split(',');
				var PageID=DetailsArr[1];
				TheCurrentPageName=DetailsArr[2];
				CurrentPage=PageID;
				COCount=0;
				CurrentTemplate=DetailsArr[5]
				httpArray=Array();
				
				if(PageDetails[PageID]==null){
					if(MaxCOs[CurrentTemplate]==null){
						//alert(MaxCOs);
						MaxCOs[CurrentTemplate]=0;	
					}
					PageDetails[PageID]=new Array();
					PageDetails[PageID]['PageName']=DetailsArr[2];
					PageDetails[PageID]['PageTitle']=DetailsArr[3];
					var TargetCO=document.getElementById('PageTitle');
					if(TargetCO!=null){
						TargetCO.innerHTML =PageDetails[PageID]['PageTitle'];
					}
					PageDetails[PageID]['COs']=new Array();
					PageRef[PageRefCount]=DetailsArr[2];
					PageRefIDs[PageRefCount]=PageID;
					PageRefCount++;
					Count=0;
					for(x=1;x<CODetailsArr.length;x++){
						var COArr=CODetailsArr[x].split(',');
						PageDetails[PageID]['COs'][Count]=COArr[0];
						Count++;
					}
					if(Count>MaxCOs[CurrentTemplate]) MaxCOs[CurrentTemplate]=Count;
					Loading.totalsteps=PageDetails[PageID]['COs'].length;
					LoadPage(PageID);
				}else{
					Loading.totalsteps=PageDetails[PageID]['COs'].length;	
					LoadPage(PageID);
				}
				
				
			}else{
				Loading.astop();
			}
		}
	}
}


//==========================================
//===== For POST requests
//==========================================

function ResponsePost(){
	
	// Make sure that the transaction has finished. The XMLHttpRequest object 
	//	has a property called readyState with several states:
	//	0: Uninitialized
	//	1: Loading
	//	2: Loaded
	//	3: Interactive
	//	4: Finished 
	if(http.readyState == 4){ //Finished loading the response
		var res=http.responseText;
		//alert(res);
		if(res!=null){
			var CODetailsArr=res.split('`~`');
			if(CODetailsArr[1]!=null){
				var DetailsArr=CODetailsArr[0].split(',');
				var PageID=DetailsArr[1];
				TheCurrentPageName=DetailsArr[2];
				CurrentPage=PageID;
				COCount=0;
				CurrentTemplate=DetailsArr[5]
				
				
				if(PageDetails[PageID]==null){
					if(MaxCOs[CurrentTemplate]==null){
						MaxCOs[CurrentTemplate]=0;	
					}
					PageDetails[PageID]=new Array();
					PageDetails[PageID]['PageName']=DetailsArr[2];
					PageDetails[PageID]['PageTitle']=DetailsArr[3];
					PageDetails[PageID]['COs']=new Array();
					PageRef[PageRefCount]=DetailsArr[2];
					PageRefIDs[PageRefCount]=PageID;
					PageRefCount++;
					Count=0;
					for(x=1;x<CODetailsArr.length;x++){
						var COArr=CODetailsArr[x].split(',');
						PageDetails[PageID]['COs'][Count]=COArr[0];
						Count++;
					}
					if(Count>MaxCOs[CurrentTemplate]) MaxCOs[CurrentTemplate]=Count;
					Loading.totalsteps=PageDetails[PageID]['COs'].length;	
					LoadPagePost(PageID);
				}else{
					Loading.totalsteps=PageDetails[PageID]['COs'].length;	
					LoadPagePost(PageID);
				}
				var TargetCO=document.getElementById('PageTitle');
				if(TargetCO!=null){
					TargetCO.innerHTML =PageDetails[PageID]['PageTitle'];
				}
			}else{
				Loading.astop();
			}
		}
	}
}

function UpdateContentObjectsAfterPost(TheUrl,PostVars){
	//alert(TheUrl);
	Loading.astart();
	if(TheUrl.indexOf("http")==-1){
		var Start=1;
		var CommandArg=2;
		var GetVarStart=3;
	}else{
		var Start=3;
		var CommandArg=4;
		var GetVarStart=5;
	}
	var TUrl=TheUrl;
	var tmpArr=new Array;
	tmpArr=TUrl.split("/");
	var TargetUrl="";
	CurrentGetString="";
	for(x=Start;x<tmpArr.length;x++){
		if(x==CommandArg){
			TargetUrl+="/GETALLCOS";
		}else{
			if(x>GetVarStart){
				CurrentGetString+=tmpArr[x]+"/"
			}
			TargetUrl+="/"+tmpArr[x];
		}
	}
	//alert(TargetUrl);
	PostActionUrl=TargetUrl;
	CurrentPostVars=PostVars;
	http.open('get', TargetUrl);
	http.onreadystatechange = ResponsePost; 
	http.send(null);
}

function LoadPagePost(PageID){
	if(COCount<MaxCOs[CurrentTemplate]){
		if(PageDetails[PageID]['COs'][COCount]==null){
			COCount++;
			LoadPagePost(CurrentPage);
		}else{
			if(PageDetails[PageID]['COs'][COCount]!=""){
				var TheUrl="/site/GETCO"+PageDetails[PageID]['COs'][COCount]+"/"+PageDetails[PageID]['PageName']+"/"+CurrentGetString;
				var LoadPagesObject= new LoadPages();
				LoadPagesObject.method="POST";
				LoadPagesObject.postData=CurrentPostVars;
				LoadPagesObject.CONum=PageDetails[PageID]['COs'][COCount];
				LoadPagesObject.url=TheUrl;
				LoadPagesObject.doReq();
				COCount++;
				LoadPagePost(CurrentPage);
			}else{
				COCount++;
				LoadPagePost(CurrentPage);
			}
		}
	}else{
		//finished
		for(x=1;x<MaxCOs[CurrentTemplate];x++){
			if(!PageDetails[PageID]['COs'].contains(x)){
				var TargetCO=document.getElementById('CO'+x);
				if(TargetCO!=null){
					TargetCO.innerHTML ="";
				}
			}else{
				
			}
		}
		
	}
}

//==============================================
//=== All to do with capturing javascript events
//==============================================
var CurrentPageName="";
function OnIFrameLoad(SRC){
	//alert(SRC);
	if(SRC!=null){
		var PageName=SRC;
		//alert("PageName="+PageName);
		if((CurrentPageName!=PageName)&&(CurrentPageName!="")){
			for(x=0;x<PageRef.length;x++){
				//alert(PageRef[x]);
				if(PageRef[x]==PageName){
					CurrentPage=PageRefIDs[x];
					COCount=0;
					//alert(CurrentPage);
					Loading.astart();
					var TargetCO=document.getElementById('PageTitle');
					if(TargetCO!=null){
						TargetCO.innerHTML =PageDetails[PageRefIDs[x]]['PageTitle'];
					}
					//LoadPage(PageRefIDs[x]);
					UpdateContentObjectsBack();
				}
			}
		}
	}
}

function SendIFrame(Url){
	//alert("SendIFrame->"+Url);
	var tmpArr=Url.split("/");
	var TargetUrl="";
	var HashLoc="";
	CurrentPageName=tmpArr[5];
	var Ran=Math.floor(Math.random()*10000)
	HashLoc="?Ran="+Ran+"&GotoPage="+tmpArr[5];
	var DestUrl="/main/ajax-iframe.php";//document.location.href;
	/*
	if(DestUrl.indexOf("#")!=-1){
		var tmpArr=DestUrl.split("#");
		DestUrl=tmpArr[0];
		alert(DestUrl);
	}*/
	var IDest=DestUrl+HashLoc;
	var ITarget=document.getElementById("AJAXIFrame");
	//alert(IDest);
	ITarget.src=IDest;
}

function GotoHash(Url){
	var HUrl=Url.split("#");
	var DestUrl=document.location.href;
	if(DestUrl.indexOf("#")!=-1){
		var tmpArr=DestUrl.split("#");
		DestUrl=tmpArr[0];
		//alert(DestUrl);
	}
	//document.location.href=DestUrl+"#"+HUrl[1];
	document.location.href="#"+HUrl[1];
}

function AddHash(ThePageName){
	//alert(PageName);
	var DestUrl=document.location.href;
	if(DestUrl.indexOf("#")!=-1){
		var tmpArr=DestUrl.split("#");
		DestUrl=tmpArr[0];
		//alert(DestUrl);
	}
	DestUrl=DestUrl+"#GP-"+ThePageName;
	//alert(DestUrl);
	document.location.href=DestUrl;
}

function CheckForStartHash(){
	//alert(PageName);
	var TheUrl=document.location.href;
	if(TheUrl.indexOf("#GP-")!=-1){
		var tmpArr=TheUrl.split("#GP-");
		DestPage=tmpArr[1];
		UpdateContentObjectsFromStartHash(DestPage);
	}
}


function LinkClick(element){
	if((browser == "Microsoft Internet Explorer")||(browser == "Netscape")){
		var RetVal;
		RetVal=UpdateContentObjects(element.href);	
		if(RetVal){
			return true;
		}else{
			try{
				ev = event;
				ev.returnValue=false;
				return false;
			}
			catch(e)
			{
				return false;
			}
		}
	}else{
		return true;	
	}
}

function clickHandler(e){
	//var xlink=document.links[x];
	//alert(x.href);
	if(!e)
	  e = event;
	var TheUrl="";
	if(e.srcElement==null){
		var TheUrl=e.target;
		TheUrl=TheUrl.href;
	}else{
		if(e.srcElement!=null){
			var TheUrl=e.srcElement.href;
		}else{
			//alert(e);	
			TheUrl=null;
		}
	}
	if(TheUrl==null){
		//alert(e.fromElement);
		return false;
	}else{
		if(TheUrl.indexOf("#")!=-1){
			GotoHash(TheUrl);
			if(browser == "Microsoft Internet Explorer"){
				e.returnValue=false;
			}else{
				e.preventDefault(true);
			}
			return false;
		}else{
			var RetVal;
			RetVal=UpdateContentObjects(TheUrl);	
			if(RetVal){
				return true;
			}else{
				//e = event;
				if(browser == "Microsoft Internet Explorer"){
					e.returnValue=false;
				}else{
					e.preventDefault(true);
				}
				return false;
			}
		}
	}
	//alert(e.srcElement.href);
	
	
	
	//return false;
}


function jsHandler(url, name, parms){
	
	var TheUrl=url;
	
	RetVal=UpdateContentObjects(TheUrl);	
	if(RetVal){
		return true;
	}else{
		//e = event;
		if(browser == "Microsoft Internet Explorer"){
			e.returnValue=false;
		}else{
			e.preventDefault(true);
		}
		return false;
	}

	//alert(e.srcElement.href);
	
	
	
	//return false;
}



function CaptureAllLinks(){
	for(x=0;x<document.links.length;x++){
			//alert(document.links[x].href);
			//alert(document.all[x].type);
		if(document.links[x].onclick==null){
			document.links[x].onclick=clickHandler;
		}
		//addEvent(document.links[x],'click',LinkObjects[x].theclick);

	}
}

function formHandler(e){
	if(!e)
	  e = event;
		
	var TheUrl="";
	if(e.srcElement==null){
		var TheForm=e.target;
		e.preventDefault(true);
	}else{
		if(browser == "Microsoft Internet Explorer"){
			e.returnValue=false;
		}else{
			e.preventDefault(true);
		}
		if(e.srcElement!=null){
			var TheForm=e.srcElement;
		}else{
			//alert(e);
			TheForm=null;
		}
	}
	if(TheForm==null){
		//alert(e.fromElement);
	}else{
		var PostValues=GetWholeForm(TheForm.name);
		UpdateContentObjectsAfterPost(TheForm.action,PostValues)
		//alert(PostValues);
	}
}

function SubmitAJAXForm(TheForm){
	if((browser == "Microsoft Internet Explorer")||(browser == "Netscape")){
		if(TheForm==null){
			//alert(e.fromElement);
		}else{
			var PostValues=GetWholeForm(TheForm.name);
			UpdateContentObjectsAfterPost(TheForm.action,PostValues)
			//alert(TheForm.name+" "+PostValues);
		}
		return false;
	}else{
		return true;	
	}
}

function ExternalPost(){
	return true;	
}

function CaptureAllForms(){
	for(x=0;x<document.forms.length;x++){
		if(document.forms[x].onsubmit==null){
			document.forms[x].onsubmit=formHandler;	
		}
	}
}

function OnPageLoadStartup(){
	
	Startup();
	CheckForStartHash();
	//var jsHandler_original_open = window.open;
	window.open = window.open;
	
}

function Startup(){
	if((browser == "Microsoft Internet Explorer")||(browser == "Netscape")){
		CaptureAllForms();
		CaptureAllLinks();
	}
}

function GetWholeForm(myform){
	theform=document.forms[myform];
	var retval="";
	for (x = 0; x < theform.length; x++)
	{
		//alert(theform[x].type);
		if((theform[x].type == 'password')||(theform[x].type == 'text')||(theform[x].type == 'textarea')||(theform[x].type == 'hidden')||(theform[x].type == 'submit')){
			retval+=theform[x].name+"="+theform[x].value+"&";
		}
		if((theform[x].type == 'checkbox')&&(theform[x].checked==true)){
			retval+=theform[x].name+"="+theform[x].value+"&";
		}
		if(theform[x].type == 'select-one'){
			//alert(theform[x].options[theform[x].selectedIndex].value);
			retval+=theform[x].name+"="+theform[x].options[theform[x].selectedIndex].value+"&";
		}
		//if((theform[x].type == 'hidden')&&(theform[x].id == iselement))
		//{
			//if(theform[x].value != "0"&&theform[x].value != ""){
				//retval=true;
			//};
		//}
	}	
	//alert(retval);
	return retval;
}



function addEvent( obj, type, fn ) { 
  if ( obj.attachEvent ) { 
    obj['e'+type+fn] = fn; 
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );} 
    obj.attachEvent( 'on'+type, obj[type+fn] ); 
  } else 
    obj.addEventListener( type, fn, false ); 
} 
function removeEvent( obj, type, fn ) { 
  if ( obj.detachEvent ) { 
    obj.detachEvent( 'on'+type, obj[type+fn] ); 
    obj[type+fn] = null; 
  } else 
    obj.removeEventListener( type, fn, false ); 
} 


Array.prototype.contains = function (element) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == element) {
            return true;
        }
    }
    return false;
};

function IsNumeric(sText)

{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;

 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
   
   }
   
function dhtmlLoadScript(url)
{
   var e = document.createElement("script");
   e.src = url;
   e.type="text/javascript";
   document.getElementsByTagName("head")[0].appendChild(e);
}

