function _$(id){ return document.getElementById(id); }
var userAgent = navigator.userAgent.toLowerCase();
var msie  , ie6 = false;
msie = /msie/.test(userAgent);
if(true == msie){ie6 = /6\.0/.test(userAgent); }
var _unsuppotred = new Array();
function getAllUnzIndexSupportedObjects(){
	var _unsub = new Array();
	var applets = 	getUnSubShowObjectsOf('applet');
	var objects =   getUnSubShowObjectsOf('object');
	_unsub = applets.concat(objects);
	if(ie6){
		var selects =   getUnSubShowObjectsOf('select');
		_unsub = _unsub.concat(selects);
	}
	_unsuppotred = _unsub
	getAllUnzIndexSupportedObjects = function() { return _unsuppotred;} ;
	return _unsub;
}
function getUnSubShowObjectsOf(type){
	var objs = document.getElementsByTagName(type);
	var _tmp_unsub = new Array();
	for(i=0;i<objs.length;i++){
		if(false != ( sStatus = isShown(objs[i]))){
			_tmp_unsub[_tmp_unsub.length] = {unsup :objs[i] , showStatus : sStatus};
		}
	}
	return _tmp_unsub;
}
function isShown(obj){
	if(obj.style.display == 'none' || obj.style.visibility == 'hidden'){
		return false;
	}
	return { visibility : obj.style.visibility , display : obj.style.display};
}
function getPageScroll(){

	var yScroll,xScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	} else if (document.body) {
		yScroll = document.body.scrollTop;
		xScroll = document.body.scrollLeft;
	}

	arrayPageScroll = new Array('',yScroll)
	return {x : xScroll , y : yScroll };
}
function getPageSize(){
	var xScroll, yScroll;
	if (window.innerHeight && window.scrollMaxY) {
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else {
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	var windowWidth, windowHeight;
	if (self.innerHeight) {
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) {
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}

	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else {
		pageHeight = yScroll;
	}

	if(xScroll < windowWidth){
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}
	return {pWidth : pageWidth,pHeight : pageHeight,wWidth : windowWidth, wHeight:windowHeight};
}
function showElement(id){
	var elm = _$(id);
	if(elm){
		elm.style.display = 'block';
	}
}
function hideElement(id){
	var elm = _$(id);
	if(elm){
		elm.style.display = 'none';
	}
}
function opacity(id, opacStart, opacEnd, millisec) {
	var speed = Math.round(millisec / 100);
	var timer = 0;
	if(opacStart > opacEnd) {
		for(i = opacStart; i >= opacEnd; i--) {
			setTimeout("changeOpac('" + id + "'," + i + ")",(timer * speed));
			timer++;
		}
	} else if(opacStart < opacEnd) {
		for(i = opacStart; i <= opacEnd; i++)
		{
			setTimeout("changeOpac('" + id + "'," + i + ")",(timer * speed));
			timer++;
		}
	}
}
function changeOpac(id , opacity) {
	var obj = _$(id);
	if(obj){
		var object = obj.style;
		object.opacity = (opacity / 100);
		object.MozOpacity = (opacity / 100);
		object.KhtmlOpacity = (opacity / 100);
		object.filter = "alpha(opacity=" + opacity + ")";
	}
}
function ShadowBox(msg , options){
	this.id = "sbox" ;
	this.shaowColor = "#000000";
	this.transHoldTime = 50;
	this.maxOpacity = "70";
	this.box = "<div style='width:300px;background-color:#ffffff'>Hello Dude</div>";
	this.boxWidth = "530px";
	this.prefix = this.id+"_msg";
	this.paddingLeft = "0";
	this.top = "30%";
	this.dir = "rtl";
	if(msg != null){
		this.box = msg;
	}
	for(option in options){
		eval("this."+option+" = '"+options[option]+"'");
	}

	this.init = function (){
		var objBody = document.getElementsByTagName("body").item(0);
		var objOverlay = document.createElement("div");
		objOverlay.setAttribute('id',this.id);
		objOverlay.style.backgroundColor = this.shaowColor;
		objOverlay.style.display = 'none';
		objOverlay.style.position = 'absolute';
		objOverlay.style.top = '0';
		objOverlay.style.left = '0';
		objOverlay.style.zIndex = '2147483647';
		objOverlay.style.width = "100%";
		objBody.insertBefore(objOverlay, objBody.firstChild);
	};
	this.show  = function (){
		var shadowBox = _$(this.id);

		if(!shadowBox)
		{

			this.init();
		}

		var shadowBox = _$(this.id);

		var pageHandler = getPageSize();
		var scroll = getPageScroll();
		shadowBox.style.position = 'absolute';
		shadowBox.style.top = 0;
		shadowBox.style.left = 0;
		shadowBox.style.height = pageHandler.pHeight + scroll.y + "px";
		shadowBox.style.width = "100%";

		var  msgbox  = _$(this.prefix);
		if(msgbox)
		{
			document.getElementsByTagName('body')[0].removeChild(msgbox);
		}
		msgbox = document.createElement("div");
		msgbox.style.position = 'fixed';
		msgbox.id = this.prefix;
		msgbox.style.top = this.top;
		msgbox.className = this.prefix;
		msgbox.style.display = 'none';
		msgbox.style.zIndex = 2147483647;
		msgbox.innerHTML = this.box;
		msgbox.style.width = this.boxWidth;
		msgbox = document.getElementsByTagName('body')[0].appendChild(msgbox);
		if( this.dir == 'rtl' && msie ){
			msgbox.style.right = "50%";
			msgbox.style.marginRight=(( ( parseInt(this.paddingLeft,10)*1 + parseInt(this.boxWidth,10)*1)/2)*-1) + "px";

		}    else{
			msgbox.style.left = "50%";
			msgbox.style.marginLeft=(( ( parseInt(this.paddingLeft,10)*1 + parseInt(this.boxWidth,10)*1)/2)*-1) + "px";

		}
		if(ie6){
			msgbox.style.position  = 'absolute';
					msgbox.style.top =  (document.documentElement.scrollTop || document.body.scrollTop) + Math.round(15 * (document.documentElement.offsetHeight || document.body.clientHeight) / 100) + 'px';

			window.onscroll = function(){
				msgbox.style.top =  (document.documentElement.scrollTop || document.body.scrollTop) + Math.round(15 * (document.documentElement.offsetHeight || document.body.clientHeight) / 100) + 'px';
			}

			shadowBox.style.width = pageHandler.pWidth + scroll.x + "px";
		}

		var objects = getAllUnzIndexSupportedObjects();
		for(var i = 0 ; i<objects.length;i++){
			objects[i].unsup.style.display = 'none';
		}
		changeOpac(this.id,0);
		changeOpac(msgbox.id,0);
		msgbox.style.display = 'block';
		opacity(this.id,0,this.maxOpacity,this.transHoldTime);
			opacity(msgbox.id,0,100,50);
				showElement(shadowBox.id);
	};
	this.hide = function (){

		var shadowBox = _$(this.id);

		if(shadowBox != 'undefined' && shadowBox.style.display == 'block')
		{
			opacity(this.id,this.maxOpacity,0,this.transHoldTime);

			setTimeout("hideElement('"+this.id+"')",this.transHoldTime);
		}
		var msgbox = _$(this.prefix);
		if(msgbox && msgbox.style.display == 'block'){
			document.getElementsByTagName('body')[0].removeChild(msgbox);
		}
		for(var i = 0 ; i<_unsuppotred.length;i++){
			_unsuppotred[i].unsup.style.display =_unsuppotred[i].showStatus.display;
			_unsuppotred[i].unsup.style.visibility =_unsuppotred[i].showStatus.visibility;
		}
	};
	this.hideImmediatly = function hideImmediatly(){
		var shadowBox = _$(this.id);
		hideElement(shadowBox);
	};
}