
// This Class converts some non-international styles (e.g. dates) to ISO standard and vice versa
function Convert() {
	this.TimestampToISO = function(ts, offset) {
		ts = parseInt(ts)
	
		if (ts > 0) {
		
			if (parseInt(offset)!=0)
				var d = new Date(ts+(parseInt(offset)*3600000))
			else
				var d = new Date(ts)
	
			var iso = d.getUTCFullYear()+"-"
		
			iso += (d.getUTCMonth()+1)<10 ? "0"+(d.getUTCMonth()+1)+"-" : (d.getUTCMonth()+1)+"-"
			iso += d.getUTCDate()<10 ? "0"+d.getUTCDate()+" " : d.getUTCDate()+" "
			iso += d.getUTCHours()<10 ? "0"+d.getUTCHours()+":" : d.getUTCHours()+":"
			iso += d.getUTCMinutes()<10 ? "0"+d.getUTCMinutes() : d.getUTCMinutes()
			return iso
	
		} else
			return false
	}

	this.DateISOtoUS = function(iso) {
		
		if (iso.length>19) {
			var us = ""
	
			// Format: 
			//		ISO: 2006-12-25 13:30:00+0
			//		US: Dec 25, 2006 13:30:00 GMT

			var year = iso.substr(0, 4)
			var month = iso.substr(5, 2)
			var day = iso.substr(8, 2)
			var hour = iso.substr(11, 2)
			var minute = iso.substr(14, 2)
			var second = iso.substr(17, 2)
			var gmt = iso.substring(19, iso.length)
			
			gmt = parseInt(gmt)<0 ? gmt : '+'+gmt
			
			if (year>2100 || year<2000)
				return false
			
			if (month>12 || month<1)
				return false
				
			if (day>31 || day<1)
				return false
				
			if (hour>24 || hour<0)
				return false
				
			if (minute>60 || second>60 || minute<0 || second<0)
				return false

			var months = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
			month = month-1

			var us = months[month]+" "+day+", "+year+" "+hour+":"+minute+":"+second+" GMT"+gmt
	
			return us
		} else
			return false
	}


}


// This Class is for perform quick browser checks
function Browser() {

	this.isIE = function() {
		if (navigator.appName.search("Microsoft")>-1)
			return true
		else
			return false
	}

	this.isKHTML = function() {
		if (navigator.userAgent.search("Safari")>-1 || navigator.userAgent.search("Konqueror")>-1)
			return true
		else
			return false
	}

	this.isGECKO = function() {
		if (navigator.userAgent.search("Gecko")>-1)
			return true
		else
			return false
	}

}

// This Class is for all the magical, funky and sparkling eye candy :)
function Magic() {
	var browser = new Browser()

	// Set the OPACITY (0 .. 1) of an element (ID)
	this.set_opacity = function(ID, OPACITY) {
		if (browser.isIE()) {
			OPACITY = OPACITY * 100
			parent.document.getElementById(ID).style["filter"] = "Alpha(opacity="+OPACITY+")"
		} else
			parent.document.getElementById(ID).style.opacity = OPACITY;
	}

	// Set the DISPLAY state (e.g. none, block ...) of an element (ID)
	this.set_display = function(ID, DISPLAY) {
		parent.document.getElementById(ID).style["display"] = DISPLAY
	}

	// Set the position (x=left, y=top) of an element (ID)
	this.set_position = function(ID, X, Y) {
		parent.document.getElementById(ID).style["left"] = X+"px"
		parent.document.getElementById(ID).style["top"] = Y+"px"
	}

	// Set the width (w) and height (h) of an element (ID)
	this.set_size = function(ID, W, H) {
		parent.document.getElementById(ID).style["width"] = W+"px"
		parent.document.getElementById(ID).style["height"] = H+"px"
	}


	// Fade an element (and all childs) within DURATION (in ms) from opacity START to opacity END (0 .. 1, 0 = transparent, 1 = opaque)
	this.fade = function(ID, START, END, DURATION, DISPLAY) {
			// Get steps
			var STEPS = DURATION*(0.24)
			var ENUM =  (END-START)/STEPS 
			var TIMES = DURATION/STEPS

			var t = 0
			var o = START
			for (var i = 0; i < STEPS; i++) {
				window.setTimeout('magic.set_opacity("'+ID+'", '+o+')', t)
				o = o+ENUM
				t = t+TIMES
			}

			if (DISPLAY == "none")
				window.setTimeout('magic.set_display("'+ID+'", "'+DISPLAY+'")', (DURATION+100))
			else {
				this.set_opacity(ID, START)
				this.set_display(ID, DISPLAY)
			}
	}

	// Move an element from START_X/Y to END_X/Y within DURATION (in ms)
	this.move = function(ID, START_X, START_Y, END_X, END_Y, DURATION) {
			// Get steps
			var STEPS = DURATION*(0.24)
			var ENUMX = (END_X-START_X)/STEPS 
			var ENUMY = (END_Y-START_Y)/STEPS 
			var TIMES = DURATION/STEPS

			var t = 0
			var x = START_X
			var y = START_Y
			for (var i = 0; i < STEPS; i++) {
				window.setTimeout('magic.set_position("'+ID+'", '+x+', '+y+')', t)
				x = x+ENUMX
				y = y+ENUMY
				t = t+TIMES
			}
	}

	// Resize an element (ID) from START_HEIGHT/WIDTH to END_HEIGHT/WIDTH within DURATION (in ms)
	this.size = function(ID, START_HEIGHT, START_WIDTH, END_HEIGHT, END_WIDTH, DURATION) {
			// Get steps
			var STEPS = DURATION*(0.48)
			var ENUMW = (END_WIDTH-START_WIDTH)/STEPS 
			var ENUMH = (END_HEIGHT-START_HEIGHT)/STEPS 
			var TIMES = DURATION/STEPS

			var t = 0
			var w = START_WIDTH
			var h = START_HEIGHT
			for (var i = 0; i < STEPS; i++) {
				window.setTimeout('magic.set_size("'+ID+'", '+w+', '+h+')', t)
				w = w+ENUMW
				h = h+ENUMH
				t = t+TIMES
			}
	
	
	}

}