window.onresize = function() { 
	MoveDatas();
}

function getFlashMovie(movieName) {   
	var isIE = navigator.appName.indexOf('Microsoft') != -1;   
	return (isIE) ? window[movieName] : document[movieName];  
}  
function GoToLink(MyLink) {   
	//MyLink used exactly the same format as our flash :|
	getFlashMovie('OurFlash').GoToLink(MyLink);
}
var FlashWidth = 965;
var FlashHeight = 630;
var UpperHTML = new Array();
var LowerHTML = new Array();
var MainHTML = new Array();
function getFromFlash(Type, TargetData) {
	/*
	SYNTAX START ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	HTML_DATA_X 		: Just clear our HTML_DATA_X div and put a new one in it, X can be either UPPER , LOWER and CONTENT
	TITLE				: Change the title!
	SYNTAX END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	*/

	var ReturnedString = '';
	if(Type == 'LOAD'){
		//Changes request title and url_name from our server :|
	}else if(Type == 'SCROLL'){
		MoveDatas(TargetData);
	}else if(TargetData.data.Type == 'HTML'){
		
		if(Type == 'UPDATE_DATA_UPPER' || Type == 'UPDATE_DATA_LOWER' || Type == 'UPDATE_DATA'){
			var MyArr = null;
			if(Type == 'UPDATE_DATA_UPPER'){
				MyArr = this.UpperHTML;
			}else if(Type == 'UPDATE_DATA_LOWER'){
				MyArr = this.LowerHTML;
			}else{
				MyArr = this.MainHTML;
			}
			for (x in MyArr){
				var SingleData = MyArr[x];
				if(SingleData.data.ID == TargetData.data.ID){
					MyArr[x].y = TargetData.y;
					//MyArr.splice(x,1);
					//break;
				}
			}
			//MyArr.push(TargetData);
			MoveDatas();
		}else if(Type == 'HTML_DATA_UPPER' || Type == 'HTML_DATA_LOWER' || Type == 'HTML_DATA'){
			var MyID = TargetData.data.ID;
			if(Type == 'HTML_DATA_UPPER'){
				this.UpperHTML.push(TargetData);
			}else if(Type == 'HTML_DATA_LOWER'){
				this.LowerHTML.push(TargetData);
			}else if(Type == 'HTML_DATA'){
				this.MainHTML.push(TargetData);
			}
			var MyStyle = 'position: absolute; ';
			if(TargetData.width > 0){
				MyStyle += 'width: ' + TargetData.width + 'px; ';
			}
			if(TargetData.height > 0){
				MyStyle += 'height: ' + TargetData.height + 'px; ';
			}
			var StartDiv = '<div id="' + MyID + '" style="' + MyStyle + '">';
			var EndDiv = '</div>';
			document.getElementById(Type).innerHTML += StartDiv + TargetData.data.LongContent + EndDiv;
			ReturnedString = document.getElementById(Type).innerHTML;
			MoveDatas();
			//alert(document.getElementById(Type).innerHTML);
		}else if(Type == 'VISIBLE' || Type == 'INVISIBLE'){
			if(Type == 'INVISIBLE'){
				document.getElementById(TargetData.data.ID).style.visibility = 'hidden';
			}else{
				document.getElementById(TargetData.data.ID).style.visibility = 'visible';
			}
		}
	}
	return ReturnedString;
}
function MoveDatas(TargetScroll){
	//document.getElementById('HTML_DEBUG').innerHTML = '';
	Viewport();
	var NewObject = new Array();
	var MyOffset = getFlashMovie('OurFlash').sendToFlash('GET_OFFSET', NewObject);
	
	for ( ai in this.UpperHTML ){
		SingleData = this.UpperHTML[ai];
		MoveData(document.getElementById(SingleData.data.ID), SingleData, MyOffset, TargetScroll);
	}
	for ( ai in this.LowerHTML ){
		SingleData = this.LowerHTML[ai];
		MoveData(document.getElementById(SingleData.data.ID), SingleData, MyOffset, TargetScroll);
	}
	for ( ai in this.MainHTML ){
		SingleData = this.MainHTML[ai];
		MoveData(document.getElementById(SingleData.data.ID), SingleData, MyOffset, TargetScroll);
	}
}
function MoveData(TargetDoc, TargetData, TargetOffset, TargetScroll){
	if(TargetData != null){
		var GeneratedX = TargetData.x;
		var GeneratedY = TargetData.y;
		var ScrollX = 0;
		var ScrollY = 0;
		if(TargetScroll != null){
			if(TargetScroll.x != null){
				ScrollX = TargetScroll.x;
			}
			if(TargetScroll.y != null){
				ScrollY = TargetScroll.y;
			}
		}

		//Horizontally Rata Tengah (X)
		if(this.windowX > FlashWidth){
			GeneratedX = GeneratedX - (TargetOffset.offset_x);
		}
		
		//Vertically Rata Tengah (Y)
		if(this.windowY > FlashHeight){
			GeneratedY = GeneratedY - (TargetOffset.offset_y);
		}
		if(ScrollY != 0){
			GeneratedY = GeneratedY + ScrollY + ((this.windowY - 630)/2);
		}
		
		TargetDoc.style.top = GeneratedY + 'px';
		TargetDoc.style.left = GeneratedX + 'px';
		//document.getElementById('HTML_DEBUG').innerHTML += '\n<br>' + TargetData.data.ID + ' :: TargetData=' + TargetData.x +',' + TargetData.y + ' VS Generated=' + GeneratedX + ',' + GeneratedY;
		//document.getElementById('HTML_DEBUG').innerHTML += '\n' + TargetData.data.ID + ' :: ' + TargetData.x + ',' + TargetData.y + ' : ' + GeneratedX + ',' + GeneratedY + ' :: ' + ScrollX + ',' + ScrollY + ' : ' + TargetDoc.offsetTop + ',' + TargetDoc.offsetLeft + '\nCompare :\nGlobal Coord = ' + TargetData.IsAutoHeight + ' --> ' + TargetOffset.offset_x + ',' + TargetOffset.offset_y + '\nVS\nGenerated Coord = ' + GeneratedX + ',' + GeneratedY + '\nFROM\nORI Coord = ' + TargetData.x + ',' + TargetData.y;
	}
}

function Viewport(){ 
	this.windowX = (document.documentElement && document.documentElement.clientWidth) || window.innerWidth || self.innerWidth || document.body.clientWidth; 
	this.windowY = (document.documentElement && document.documentElement.clientHeight) || window.innerHeight || self.innerHeight || document.body.clientHeight; 
	this.scrollX = (document.documentElement && document.documentElement.scrollLeft) || window.pageXOffset || self.pageXOffset || document.body.scrollLeft; 
	this.scrollY = (document.documentElement && document.documentElement.scrollTop) || window.pageYOffset || self.pageYOffset || document.body.scrollTop; 
	this.pageX = (document.documentElement && document.documentElement.scrollWidth) ? document.documentElement.scrollWidth : (document.body.scrollWidth > document.body.offsetWidth) ? document.body.scrollWidth : document.body.offsetWidth; 
	this.pageY = (document.documentElement && document.documentElement.scrollHeight) ? document.documentElement.scrollHeight : (document.body.scrollHeight > document.body.offsetHeight) ? document.body.scrollHeight : document.body.offsetHeight;
}

//BROWSER DETECT ....
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();


//ENABLE SCROLLING FOR FIREFOX When WMODE = OPAQUE ------------------------------------------------------------------------------------------------------------------

    if(BrowserDetect.browser == 'Firefox') {
        window.addEventListener('DOMMouseScroll', handleWheel, false);
    }else if(BrowserDetect.browser == 'Safari' || BrowserDetect.browser == 'Opera'){
		window.addEventListener('mousewheel', handleWheel, false);
	}else if(BrowserDetect.browser == 'Chrome'){
		//alert('CHROME SPECIAL');
		//window.addEventListener('mousewheel', handleWheel, false);
	}


    function handleWheel(event) {
        var app = getFlashMovie('OurFlash');
		var xdelta = event.detail;
        if (app) {
            var o = {x: event.screenX, y: event.screenY,
                delta: xdelta,
                ctrlKey: event.ctrlKey, altKey: event.altKey,
                shiftKey: event.shiftKey}
           
            app.handleWheel(o);
        }
    }
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------
