var CurrentLID, CurrentPACK
CurrentLID = 0;
CurrentPACK = 0;
var L6check = 0;
var currentTab = '1tab';
idle = true;

//define trim function


if ('undefined' == typeof String.prototype.trim) {
  String.prototype.trim = function() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  }
}

function setElementOpacity(sElemId, nOpacity)
{
  var opacityProp = getOpacityProperty();
  //var elem = document.getElementById(sElemId);


  if (opacityProp=="filter")  // Internet Exploder 5.5+
  {
    nOpacity *= 100;

    //if filter already exist then change it thrue  filters collection   else  add opacity thrue style.filter
    var oAlpha = sElemId.filters['DXImageTransform.Microsoft.alpha'] || sElemId.filters.alpha;
	if (oAlpha) {
		oAlpha.opacity = nOpacity;
	} else {
		sElemId.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+nOpacity+")"; // Для того чтобы не затереть другие фильтры используем "+="
	}
  }
  else //other brousers
    sElemId.style[opacityProp] = nOpacity;
}

function getOpacityProperty()
{
  if (typeof document.body.style.opacity == 'string') // CSS3 compliant (Moz 1.7+, Safari 1.2+, Opera 9)
    return 'opacity';
  else if (typeof document.body.style.MozOpacity == 'string') // Mozilla 1.6 и младше, Firefox 0.8 
    return 'MozOpacity';
  else if (typeof document.body.style.KhtmlOpacity == 'string') // Konqueror 3.1, Safari 1.1
    return 'KhtmlOpacity';
  else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5) // Internet Exploder 5.5+
    return 'filter';

  return false; //has no opacity
}


function tabSwitch (objId) {
	if (idle == true & currentTab != objId){
		idle = false;
		tabChange(objId, 7, -1);
	}
}
function tabChange (objId, value, dir) {
	tab = document.getElementById(objId);
	currentTabContent = document.getElementById(currentTab + 'Content')
	tabContent = document.getElementById(objId + 'Content');
	if (dir == -1) {
		setElementOpacity(currentTabContent, (value / 8));
	} else {
		setElementOpacity(tabContent, (value / 8));
	}
	if (value == 2) {
		setElementOpacity(tabContent, value / 8);
		currentTabContent.style.display = "none";
		tabContent.style.display = "block";
		document.getElementById(currentTab).className = "passive";
		tab.className = "active";

		dir = dir * (-1);
		setTimeout('tabChange("' + objId + '",' + (++value) + ',' + dir + ')', 30);
	}
	else if (value == 8) {
		dir = dir * (-1);
		currentTab = objId;
		idle = true;
	}
	else {
		//alert (document.getElementById(currentTab + 'Content').id);
		if (dir < 0) {
			setTimeout('tabChange("' + objId + '",' + (--value) + ',' + dir + ')', 20);
		}
		else {
			setTimeout('tabChange("' + objId + '",' + (++value) + ',' + dir + ')', 20);
		}
	}
}

function startDownload(str)
{
	//calls on BodyOnloadEvent
	window.setTimeout("window.location.replace('" + str + "')", 3000, "javascript");
}

function trim(str) 
{
	return str.replace(/(\s*)(.*\S+|\s*)(\s*)/, "$2");
}
function checkEmailAddress(field) 
{
	return field.match(/\b(^(\S+@).+((\.)|(\..{2,6}))$)\b/gi);
}
// true if value consists of digits only
function isDigitalValue(val)
{
	return (val.match(/^[\d]+$/gi) > 0);
}	
function isPhoneNumber(val)
{
	return val.match(/^[\d\-\+]+$/gi);
}			
function checkInput(field)
{
	return field.match(/\b(^(([\d])+)$)\b/gi);
}
function fillUninstallRequest(obj)
{
	formError = false;
	if (obj.email.value != '' && !checkEmailAddress(obj.email.value)) {
		alert("Please input correct e-mail address");
		obj.email.focus();
		formError = true;
	} else if (obj.phone.value != '' && !isPhoneNumber(obj.phone.value)) {
		alert("Please input correct phone number");
		obj.email.focus();
		formError = true;
	} else {
		if (obj.reply.checked == true && !isPhoneNumber(obj.phone.value)) {
			if (!checkEmailAddress(obj.email.value)) {
				alert("If you would like to receive our reply to your message, please specify your e-mail address. Thank you.");
				obj.email.focus();
				formError = true;
			}
		}
	}
	if (formError == true) {
		return false;
	} else {
		obj.submit();
		return true;
	}
}

function fill(obj)
{	

	if ( obj.txtEmail.value.trim()!="" & !checkEmailAddress(obj.txtEmail.value.trim()))
	{
		alert("Please input correct e-mail address");
		obj.txtEmail.focus();
		return false;
	}
	return true;
}
function fillInstallRequest(obj)
{	
	var trimmed_comments = obj.Comments.value.trim();
	var trimmed_host = obj.Host.value.trim();
	var trimmed_login = obj.Login.value.trim();
	var trimmed_password = obj.Password.value.trim();
	var port = Number(obj.Port.value);
	
	
	chk = document.getElementsByName('InsOpt');

	none_checked=true;
	for(i=0; i<chk.length; i++) {
		if(chk[i].checked==true) none_checked=false;
	}
	if(none_checked) {
		alert("Please select a server admin tool which available on your server or hosted space");
		//obj.InsOpt.focus();
		return false;
	}

	if (trimmed_host.length < 1) {
		if (document.getElementById('INSOPT3').checked==true) {
			alert("Please input correct Login URL");
		} else {
			alert("Please input correct Host");	
		}
		obj.Host.focus();
		return false;
	}
	if ((isNaN (port) || (port == "")) & !(document.getElementById('INSOPT3').checked==true)) {
		alert("Please input correct Port");
		obj.Port.focus();
		return false;
	}
	if (trimmed_login.length < 1) {
		alert("Please input correct Login");
		obj.Login.focus();
		return false;
	}
	if (trimmed_password.length < 1) {
		alert("Please input correct Password");
		obj.Password.focus();
		return false;
	}
	obj.submit();
	obj.button.disabled = true;
	//return true;
}
function fillRequest(obj)
{	
	formError = false;
	var trimmed_comments = obj.Comments.value.trim();
	if ((obj.Product.value == "select") || (obj.Product.value == "webmail") || (obj.Product.value == "other"))
	{
		alert("Please select a product or a group of products you are using");
		obj.Product.focus();
		formError = true;
	}
	if (!checkEmailAddress(obj.txtEmail.value))
	{
		alert("Please input correct e-mail address");
		obj.txtEmail.focus();
		formError = true;
	}

	if (trimmed_comments == "")
	{
		alert("\"Comments\" field is empty. Please specify additional information regarding to your request in this field.");
		obj.Comments.focus();
		formError = true;
	}
	
	if (trimmed_comments.length > 50000)
	{
		alert("The text typed into \"Comments\" field exceeds maximum allowed size 50K and has been truncated to 50K");
		obj.Comments.value = obj.Comments.value.substr(0,50000);
		obj.Comments.focus();
		formError = true;
	}
	
	if (formError == true) {
		return false;
	} else {
		obj.button.disabled = true;
		obj.submit();
		return true;
	}
}
function fillProfServRequest(obj)
{
	var trimmed_comments = obj.Comments.value.trim();
	if (!checkEmailAddress(obj.txtEmail.value))
	{
		alert("Please input correct e-mail address");
		obj.txtEmail.focus();
		return false;
	}

	if (trimmed_comments == "")
	{
		alert("\"Comments\" field is empty. Please specify additional information regarding to your request in this field.");
		obj.Comments.focus();
		return false;
	}
	
	if (trimmed_comments.length > 50000)
	{
		alert("The text typed into \"Comments\" field exceeds maximum allowed size 50K and has been truncated to 50K");
		obj.Comments.value = trimmed_comments.substr(0,50000);
		obj.Comments.focus();
		return false;
	}
	obj.button.disabled = true;
	obj.submit();
	return true;
}
//********************************************************
//NOTE: Original ProductID value is STORED in DB        **
//********************************************************
function setFormCont()
{	var elem;
	if (document.getElementById('isAction').checked == true)
	{
		elem = document.getElementById('formAct1');
		elem.className = 'content_inactive';

		elem = document.getElementById('txtEmail');
		elem.disabled = true;
		
	}
	else
	{
		elem = document.getElementById('formAct1');
		elem.className = '';
		
		elem = document.getElementById('txtEmail');
		elem.disabled = false;
	}

}

function checkLiteForm(obj)
{
	elements = obj.getElementsByTagName('input');
	checked = 0;
	for (i=0; i < elements.length; i++) {
		if (elements[i].name == "intPlatform" && elements[i].checked != false) {
			checked = 1;
		}
	}
	if (checked == 0) {
		alert("Please choose the platform");
		return false;
	} else {	
		if (trim(obj.txtEmail.value) != "") {
			return fill(obj);
		}
	}
}

function checkForm(obj)
{
	if(document.getElementById('isAction').checked == true)
	{
		return true;
	}
	else
	{
		return fill(obj);
	}
}

function showPic(url,x,y,param)
{
	//var obj;
	var strScroll;
	
	if (param == "scroll")
		strScroll = "yes";
	else
		strScroll = "no";

	//window.open("showpic.asp?url=" + url + "&x=" + x + "&y=" + y, "_blank", "width=" + x + ",height=" + y + ",toolbar=no,menubar=no,location=no,scrollbars=" + strScroll + ",left=" + Math.ceil(screen.width/2 - x/2) + ",top=" + Math.ceil(screen.height/2 - y/2) );
	window.open("showpic-" + url, "_blank", "width=" + x + ",height=" + y + ",toolbar=no,menubar=no,location=no,scrollbars=" + strScroll + ",left=" + Math.ceil(screen.width/2 - x/2) + ",top=" + Math.ceil(screen.height/2 - y/2) );
}
function setMailForContact(obj)
{
	var at;
	at = "@";
	if (obj.name == "contLnk") { obj.href = "mai" + "lto:support"+at+"afterlogic.com";}
	if (obj.name == "headQLnk") { 
	obj.href = "mai" + "lto:headquarters"+at+"afterlogic.com"; 
	}
}
function buttonCheck(Nbut) {
//	var add = document.getElementById('L6');
//	lnkNext.disabled = false;
	var lines = ['', 't1', '', 't1','', '','t1', '','t1', '','t1', '',]
	if (Nbut < 6) {			//reset buttons on step2
//		var step2 = document.getElementsByName('PACKID');
		for (i=0; i < step2.length; i++) {
			step2[i].checked = false;
			document.getElementById('PACK' + i).className = lines[i];
		}
	}
}
function buttonCheck2(Nbut) {
	var add = document.getElementById('L6');
	lnkNext.disabled = false;
	if (Nbut < 6) {			//reset buttons on step2
		var step2 = document.getElementsByName('PACKID');
		for (i=0; i < step2.length; i++) {
			step2[i].checked = false;
		}
	}
	if (Nbut == '5') {
		document.getElementById('L5').checked = true;
		add.checked = true;
		add.disabled = true;
		
	}
	if (Nbut == '6' && !(document.getElementById('L1').checked || document.getElementById('L2').checked || document.getElementById('L3').checked || document.getElementById('L4').checked)) {
		selectPurchase1(5); 
		buttonCheck(5);
	}

	if ((Nbut == 0) || (Nbut == 2)) {
		add.disabled = false;
	}
	if ((Nbut == 1) || (Nbut == 3)) {
		add.checked = false;
		add.disabled = true;
	}
}
function selectPlatform(n) {
	if (n == 1) {
	document.getElementById('PL1').className = 'PL_selected';
	document.getElementById('PL2').className = ''; 
	}
	else {
	document.getElementById('PL2').className = 'PL_selected';
	document.getElementById('PL1').className = ''; 
	}
}

var step = 1;

function installationPoll(IO)
{	
	var a = document.getElementById('insPoll');
	var lines = ['', 't1', 't1', '','', 't1','', '','t1', '','t1', '','t1', '',]
	var e = a.getElementsByTagName('div');
	var f = a.getElementsByTagName('input');
	var warning = document.getElementById('warning');
	if (IO) {
		for(i = 0; i < (e.length); i=i+2){
		//document.getElementById('INSOPT' + i ).className = '';
		e[i].className = '';
		}
		document.getElementById('INSOPT' + IO).checked = true;
		document.getElementById('INSOPT' + IO).parentNode.parentNode.parentNode.parentNode.parentNode.className= 'purchase_selected1';
		switch (IO) {
		case 1:
			document.getElementById('port').value = '3389';
			document.getElementById('port').disabled = false;
			document.getElementById('text1').style.display='inline';
			document.getElementById('text2').style.display='none';
			document.getElementById('portReq1').style.display='inline';
			document.getElementById('portReq2').style.display='none';
			break;
		case 2:
			document.getElementById('port').value = '22';
			document.getElementById('port').disabled = false;
			document.getElementById('text1').style.display='inline';
			document.getElementById('text2').style.display='none';
			document.getElementById('portReq1').style.display='inline';
			document.getElementById('portReq2').style.display='none';
			break;
		case 3:
			document.getElementById('port').value = '';
			document.getElementById('port').disabled = true;
			document.getElementById('text1').style.display='none';
			document.getElementById('text2').style.display='inline';
			document.getElementById('portReq1').style.display='none';
			document.getElementById('portReq2').style.display='inline';
			break;
		case 4:
			document.getElementById('port').value = '21';
			document.getElementById('port').disabled = false;
			document.getElementById('text1').style.display='inline';
			document.getElementById('text2').style.display='none';
			document.getElementById('portReq1').style.display='inline';
			document.getElementById('portReq2').style.display='none';
			break;
		default:
		}
	}
}
function selectPurchase3(LID, st)
//used on Purchase pages:  xmail, webmail
{
	var a = document.getElementById('purchase_table');
	var lines = ['', 't1', 't1', '','', 't1','', '','t1', '','t1', '','t1', '',]
	var e = a.getElementsByTagName('div');
	var f = a.getElementsByTagName('input');
	var step1 = document.getElementById('step1');
	var step2 = document.getElementById('step2');
	var step3 = document.getElementById('step3');
	var step4 = document.getElementById('step4');
	var step6 = document.getElementById('step6');
	var warning = document.getElementById('warning');
	var button = document.getElementById("btnProceed");
	var linkProceed = document.getElementById("linkProceed");
	var direct = 1;
	CurrentLID = LID;
	direct=(step == st)?1:0; 
	step1.className = 'slide';
	step2.className = 'slide';
	step3.className = 'slide';
	if (step6) {step6.className = 'af_hide';}
	button.disabled = true;
	if (linkProceed) {linkProceed.className = 'disabled'}
	switch (st) {
		case 1:
			if (direct == 1) { step2.className = 'slide bld'; }
			else {step1.className = 'slide bld';}
			step = 2;
			break;
		case 2:
			if (direct == 1) {step3.className = 'slide bld';}
			else {step2.className = 'slide bld';}
			step = 3;
			break;
		case 3:
			if (direct == 1) {step3.className = 'slide bld';}
			else {step3.className = 'slide bld';}
			step = 4;
			break;
		case 4:
			step2.className = 'af_hide';
			step3.className = 'af_hide';
			linkProceed.className = 'af_hide';
			step6.className = 'slide bld';
			button.disabled = false;
			button.style.cursor = 'pointer';
			document.getElementById('txtName').focus();
			step = 5;
			break;
	}
	CleanNode(warning);
	if (LID) {
		for(i = 0; i < (e.length/2); i++){
			var t = i + 1;
			document.getElementById('LID' + t ).className = lines[t];
		}
		document.getElementById('LID' + LID).className = 'purchase_selected1';
		document.getElementById('L' + LID).checked = true;
	}
	inputs = document.form2.getElementsByTagName('input');
	
	for (i=0, c=0, s=0; i<inputs.length; i++ ) {
		c += (inputs[i].checked == true && inputs[i].type != 'checkbox') ? 1 : 0; 
		s += (inputs[i].type == 'checkbox' && inputs[i].checked == false) ? 1 : 0;
		if  (c > 1 || step == 5) {
			//alert(c + '--' + step);
			button.disabled = false;
			button.style.cursor = 'pointer';
			if (s == 2) {
				linkProceed.className = (linkProceed.className=='af_hide') ? 'af_hide' : '';
			}
			//break;
		}
			
	}
}

function selectPurchase1(LID)
{
	var a = document.getElementById('purchase_table');
	var lines = ['', 't1', 't1', '','', 't1','', '','t1', '','t1', '','t1', '',]
	var e = a.getElementsByTagName('div');
	var f = a.getElementsByTagName('input');
	CurrentLID = LID;
	switch (step) {
		case 1:
		if (LID == null) {
			document.getElementById("step1").className = 'slide';
			document.getElementById("step2").className = 'slide b';
		}
		else {
			document.getElementById("step1").className = 'slide';
			document.getElementById("step2").className = 'slide b';
			}
			step = 2
			break;
		case 2:
		if (LID == null) {
			document.getElementById("step1").className = 'slide b';
			document.getElementById("step2").className = 'slide';
		}
		else {
			document.getElementById("step1").className = 'slide';
			document.getElementById("step2").className = 'slide b';
//			document.getElementById("step3").className = 'slide b';
			}
			step = 3
			break;
		case 3:
			if (LID == null) {
				document.getElementById("step1").className = 'slide b';
				document.getElementById("step2").className = 'slide';
//				document.getElementById("step3").className = 'slide';
			}
			else {
				document.getElementById("step1").className = 'slide';
//				document.getElementById("step3").className = 'slide';
				document.getElementById("step2").className = 'slide b';
			}
			step = 3
			break;
		default:
	}
	if (LID) {
		for(i = 0; i < (e.length/2); i++){
		var t = i + 1;
		document.getElementById('LID' + t ).className = lines[t];
		}
		document.getElementById('LID' + LID).className = 'purchase_selected1';
		document.getElementById('L' + LID).checked = true;	
	}
	
}
function selectPurchase2(LID) //for net objects
{	
	var a = document.getElementById('purchase_table');
	var e = a.getElementsByTagName('div');
	var linkProceed = document.getElementById("linkProceed");
	inputs = document.form2.getElementsByTagName('input');
	
	if (LID) {
		for(i = 0; i < 5; i++){
			var t = i + 1;
			document.getElementById('LID' + t ).className = '';
			
		}
		document.getElementById('LID' + LID).className = 't1 purchase_selected';
		CurrentLID = LID;
		var button = document.getElementById("btnProceed");
		
		button.disabled = false;

		button.style.cursor = 'pointer';
		document.getElementById('L' + LID).checked = true;
	}
	for (i=0, c=0, s=0; i<inputs.length; i++ ) {
		c += (inputs[i].checked == true && inputs[i].type != 'checkbox') ? 1 : 0; 
		s += (inputs[i].type == 'checkbox' && inputs[i].checked == false) ? 1 : 0;
		if  (c > 0 && s > 0) {
			//alert(c + "__" + s );
			linkProceed.className = '';
		} else {
			//alert(c + "__" + s );
			linkProceed.className = 'disabled';
		}
			
	}

}
function selectPurchase34(LID) //like  selectPurchase
{	
	/*if (document.getElementById('L' + LID).checked == true) {
		document.getElementById('LID' + LID ).className = '';
		document.getElementById("btnProceed").disabled = true;
		document.getElementById('L' + LID).checked = false;
	} else {*/
	document.getElementById('LID' + LID).className = 'purchase_selected';
	CurrentLID = LID;
	document.getElementById("btnProceed").disabled = false;
	document.getElementById('L' + LID).checked = true;
	//};
}
function selectPurchase(LID)
{	
	var a = document.getElementById('purchase_table');
	var e = a.getElementsByTagName('div');
	for(i = 0; i < (e.length/2); i++){
		var t = i + 1;
		document.getElementById('LID' + t ).className = '';
		
	}
	document.getElementById('LID' + LID).className = 't1 purchase_selected';
	CurrentLID = LID;
	document.getElementById("btnProceed").disabled = false;
	document.getElementById('L' + LID).checked = true;
}
function selectPack2(PACKID)
{	
	var a = document.getElementById('purchase_table_2');

	var e = a.getElementsByTagName('div');
	for(i = 0; i < (e.length/2); i++){
		document.getElementById('PACK' + i).className = '';
	}
	document.getElementById('PACK' + PACKID).className = 'purchase_selected';
	CurrentPACK = PACKID;
}
function selectPack(PACKID)
{	
	var lines = ['', 't1', '', 't1','', '','t1', '','t1', '','t1', '',]
	var a = document.getElementById('purchase_table_2');

	var e = a.getElementsByTagName('div');
	for(i = 0; i < (e.length/2); i++){
		//var t = i + 1;
		document.getElementById('PACK' + i).className = lines[i];
	}
	document.getElementById('PACK' + PACKID).className = 'purchase_selected';
	CurrentPACK = PACKID;
	//document.getElementById("btnProceed").disabled = false;
	//if(PACKID == 0 && CurrentLID == 0)
		//{
			//document.getElementById("btnProceed").disabled = true;
		//}
}

function CleanNode(object)
{
    if (object)
    {
        while (object.firstChild)
        {
            object.removeChild(object.firstChild);
        }
    }
    else
    {
        return false;
    }
}
function CreateFlashBanner(link, mLink, width, height){
var str = '';
str += '<object ';
str += 'type="application/x-shockwave-flash" ';
str += 'data="'+link+'" ';
str += 'height="'+height+'" ';
str += 'width="'+width+'" ';
str += '>';
str += '<param name="movie" value="'+link+'" />';
str += '<param name="wmode" value="opaque" />';
str += '<img src="'+mLink+'" alt="" height="'+height+'" width="'+width+'" border="0">';
str += '</object>';
document.write(str);
}
//Tooltips
//=====================================================================================================

var l = 0, t = 0
var IE = document.all?true:false
//document.onmousemove = getMouseXY
var tooltip = document.createElement("div")

var currentMainTab = 'ServerSettingsTabID';
var currentPanel;
var currentServerTab = "S_0";
//----------------------------------------------------------------------------------------------------------------------------------------------
function getMouseXY(e) 
{

    try
    {
	    if (IE) 
	    {
		    l = event.clientX + document.documentElement.scrollLeft
		    t = event.clientY + document.documentElement.scrollTop
	    }
	    else 
	    {
		    l = e.pageX
		    t = e.pageY
	    }  
	    tooltip.style.left = l + "px"
	    tooltip.style.top = t + "px"
	    return true
    }
    catch(errorMsg)
    {
        ErrorMsg.Show(ErrorPrefix + ' 103');
    }
}
//----------------------------------------------------------------------------------------------------------------------------------------------
function AddToolTip(tooltip_text)
{
    try
    {
	    document.body.appendChild(tooltip)
	    tooltip.id = "tooltip"
	    tooltip.innerHTML = tooltip_text
    }
    catch(errorMsg)
    {
        ErrorMsg.Show(ErrorPrefix + ' 104');
    }
}
//----------------------------------------------------------------------------------------------------------------------------------------------
function RemoveToolTip() 
{
    try
    {
    	if (document.getElementById("tooltip") != null)
	    	document.body.removeChild(document.getElementById("tooltip"))
    }
    catch(errorMsg)
    {
        ErrorMsg.Show(ErrorPrefix + ' 105');
    }
}
//----------------------------------------------------------------------------------------------------------------------------------------------
function backgroundMove(pos, dir) {
	if (dir == 1) {
		document.getElementById(pos).className = "hover";
	} else {
		document.getElementById(pos).className = "";
	}
}

var $Browser = null;
var $getLocation = null;
// -------------

var __initNxLib = function()
{
	// init Browser object -->>
	var _Browser = function(){
		var bObj = {};
		bObj.InternetExplorer = {};
		bObj.Firefox = {};
		bObj.Safari = {};
		bObj.Opera = {};
		bObj.agent = null;
		bObj.name = navigator.appName;
		bObj.version = parseFloat(navigator.appVersion);
		if (navigator.userAgent.indexOf(' MSIE ') > -1) {
		    bObj.agent = bObj.InternetExplorer;
		    bObj.version = parseFloat(navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1]);
		}
		else if (navigator.userAgent.indexOf(' Firefox/') > -1) {
		    bObj.agent = bObj.Firefox;
		    this.version = parseFloat(navigator.userAgent.match(/ Firefox\/(\d+\.\d+)/)[1]);
		    this.name = 'Firefox';
		}
		else if (navigator.userAgent.indexOf(' Safari/') > -1) {
		    bObj.agent = bObj.Safari;
		    bObj.version = parseFloat(navigator.userAgent.match(/ Safari\/(\d+(\.\d+)?)/)[1]);
		    bObj.name = 'Safari';
		}
		else if (navigator.userAgent.indexOf('Opera/') > -1) {
		    bObj.agent = bObj.Opera;
		}
		return bObj;
	};
	$Browser = _Browser();
	// <<-- Browser object
	
	// init $getLocation function -->>
	var _getLocation = function(){
	    var lFunction = null;
	    switch ($Browser.agent) {
	        case $Browser.InternetExplorer:
	            lFunction = function(element){
	                if (element.self || element.nodeType === 9) 
	                    return {
	                        x: 0,
	                        y: 0
	                    };
	                var clientRect = element.getBoundingClientRect();
	                if (!clientRect) {
	                    return {
	                        x: 0,
	                        y: 0
	                    };
	                }
	                var documentElement = element.ownerDocument.documentElement;
	                var offsetX = clientRect.left - 2 + documentElement.scrollLeft, offsetY = clientRect.top - 2 + documentElement.scrollTop;
	                
	                try {
	                    var f = element.ownerDocument.parentWindow.frameElement || null;
	                    if (f) {
	                        var offset = (f.frameBorder === "0" || f.frameBorder === "no") ? 2 : 0;
	                        offsetX += offset;
	                        offsetY += offset;
	                    }
	                } 
	                catch (ex) {
	                }
	                return {
	                    x: offsetX,
	                    y: offsetY
	                };
	            };
	            break;
	        case $Browser.Safari:
	            lFunction = function(element){
	                if ((element.window && (element.window === element)) || element.nodeType === 9) 
	                    return {
	                        x: 0,
	                        y: 0
	                    };
	                var offsetX = 0;
	                var offsetY = 0;
	                var previous = null;
	                var previousStyle = null;
	                var currentStyle;
	                for (var parent = element; parent; previous = parent, previousStyle = currentStyle, parent = parent.offsetParent) {
	                    currentStyle = $getCurrentStyle(parent);
	                    var tagName = parent.tagName;
	                    if ((parent.offsetLeft || parent.offsetTop) &&
	                    ((tagName !== "BODY") || (!previousStyle || previousStyle.position !== "absolute"))) {
	                        offsetX += parent.offsetLeft;
	                        offsetY += parent.offsetTop;
	                    }
	                }
	                currentStyle = $getCurrentStyle(element);
	                var elementPosition = currentStyle ? currentStyle.position : null;
	                if (!elementPosition || (elementPosition !== "absolute")) {
	                    for (var parent = element.parentNode; parent; parent = parent.parentNode) {
	                        tagName = parent.tagName;
	                        if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop)) {
	                            offsetX -= (parent.scrollLeft || 0);
	                            offsetY -= (parent.scrollTop || 0);
	                        }
	                        currentStyle = $getCurrentStyle(parent);
	                        var parentPosition = currentStyle ? currentStyle.position : null;
	                        if (parentPosition && (parentPosition === "absolute")) 
	                            break;
	                    }
	                }
	                return {
						x: offsetX,
						y: offsetY
					};
	            };
	            break;
	        case $Browser.Opera:
	            lFunction = function(element){
	                if ((element.window && (element.window === element)) || element.nodeType === 9) 
	                    return {
	                        x: 0,
	                        y: 0
	                    };
	                var offsetX = 0;
	                var offsetY = 0;
	                var previous = null;
	                for (var parent = element; parent; previous = parent, parent = parent.offsetParent) {
	                    var tagName = parent.tagName;
	                    offsetX += parent.offsetLeft || 0;
	                    offsetY += parent.offsetTop || 0;
	                }
	                var elementPosition = element.style.position;
	                var elementPositioned = elementPosition && (elementPosition !== "static");
	                for (var parent = element.parentNode; parent; parent = parent.parentNode) {
	                    tagName = parent.tagName;
	                    if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop) &&
	                    ((elementPositioned &&
	                    ((parent.style.overflow === "scroll") || (parent.style.overflow === "auto"))))) {
	                        offsetX -= (parent.scrollLeft || 0);
	                        offsetY -= (parent.scrollTop || 0);
	                    }
	                    var parentPosition = (parent && parent.style) ? parent.style.position : null;
	                    elementPositioned = elementPositioned || (parentPosition && (parentPosition !== "static"));
	                }
	                return {
						x: offsetX,
						y: offsetY
					};
	            };
	            break;
	        default:
	            lFunction = function(element){                
	                if ((element.window && (element.window === element)) || element.nodeType === 9) 
	                    return {
	                        x: 0,
	                        y: 0
	                    };
	                var offsetX = 0;
	                var offsetY = 0;
	                var previous = null;
	                var previousStyle = null;
	                var currentStyle = null;
	                for (var parent = element; parent; previous = parent, previousStyle = currentStyle, parent = parent.offsetParent) {
	                    var tagName = parent.tagName;
	                    currentStyle = $getCurrentStyle(parent);
	                    if ((parent.offsetLeft || parent.offsetTop) &&
	                    !((tagName === "BODY") &&
	                    (!previousStyle || previousStyle.position !== "absolute"))) {
	                        offsetX += parent.offsetLeft;
	                        offsetY += parent.offsetTop;
	                    }
	                    if (previous !== null && currentStyle) {
	                        if ((tagName !== "TABLE") && (tagName !== "TD") && (tagName !== "HTML")) {
	                            offsetX += parseInt(currentStyle.borderLeftWidth) || 0;
	                            offsetY += parseInt(currentStyle.borderTopWidth) || 0;
	                        }
	                        if (tagName === "TABLE" &&
	                        (currentStyle.position === "relative" || currentStyle.position === "absolute")) {
	                            offsetX += parseInt(currentStyle.marginLeft) || 0;
	                            offsetY += parseInt(currentStyle.marginTop) || 0;
	                        }
	                    }
	                }
	                currentStyle = $getCurrentStyle(element);
	                var elementPosition = currentStyle ? currentStyle.position : null;
	                if (!elementPosition || (elementPosition !== "absolute")) {
	                    for (var parent = element.parentNode; parent; parent = parent.parentNode) {
	                        tagName = parent.tagName;
	                        if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop)) {
	                            offsetX -= (parent.scrollLeft || 0);
	                            offsetY -= (parent.scrollTop || 0);
	                            currentStyle = $getCurrentStyle(parent);
	                            if (currentStyle) {
	                                offsetX += parseInt(currentStyle.borderLeftWidth) || 0;
	                                offsetY += parseInt(currentStyle.borderTopWidth) || 0;
	                            }
	                        }
	                    }
	                }          
	                return {
	                    x: offsetX,
	                    y: offsetY
	                };
	            };
	    }
		return lFunction;
	};
	$getLocation = _getLocation();
	// <<-- $getLocation function
}


// Retrieves the client width of the window
function $getWidth()
{
	var width = 1024;
	if (document.documentElement && document.documentElement.clientWidth)
	{
		width = document.documentElement.clientWidth;
	}
	else if (document.body.clientWidth)
	{
		width = document.body.clientWidth;
	}
	else if (self.innerWidth)
	{
		width = self.innerWidth;
	}
	return width;
}

// Retrieves the client height of the window
function $getHeight()
{
	var height = 768;
	if (self.innerHeight)
	{
		height = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)
	{
		height = document.documentElement.clientHeight;
	}
	else if (document.body.clientHeight)
	{
		height = document.body.clientHeight;
	}
	return height;
}

function $addHandler(object, event, handler)
{
	if( object && event && handler )
	{
		if (typeof object.addEventListener != 'undefined')
		{
			if (event == 'mousewheel')
			{
				event = 'DOMMouseScroll';
			}
			object.addEventListener(event, handler, false);
		}
		else if (typeof object.attachEvent != 'undefined')
		{
			object.attachEvent('on' + event, handler);
		}
		else
		{
			return false;
		}
		return true;
	}
	else
	{
		return false;
	}
}
	
function $removeHandler(object, event, handler)
{
	if( object && event && handler )
	{
		if (typeof object.removeEventListener != 'undefined')
		{
			if (event == 'mousewheel')
			{
				event = 'DOMMouseScroll';
			}
			object.removeEventListener(event, handler, false);
		}
		else if (typeof object.detachEvent != 'undefined')
		{
			object.detachEvent('on' + event, handler);
		}
		else
		{
			return false;
		}
		return true;
	}
	else
	{
		return false;
	}
}

function $getWindow(element) {
    var doc = element.ownerDocument || element.document || element;
    return doc.defaultView || doc.parentWindow;
}

function $getCurrentStyle(element) {
    if (element.nodeType === 3) return null;
    var w = $getWindow(element);
    if (element.documentElement) element = element.documentElement;
    var computedStyle = (w && (element !== w) && w.getComputedStyle) ?
        w.getComputedStyle(element, null) :
        element.currentStyle || element.style;
    if (!computedStyle && ($Browser.agent === $Browser.Safari) && element.style) {
        var oldDisplay = element.style.display;
        var oldPosition = element.style.position;
        element.style.position = 'absolute';
        element.style.display = 'block';
        var style = w.getComputedStyle(element, null);
        element.style.display = oldDisplay;
        element.style.position = oldPosition;
        computedStyle = {};
        for (var n in style) {
            computedStyle[n] = style[n];
        }
        computedStyle.display = 'none';
    }
    return computedStyle;
}
function rating(e) {
	e = (e) ? e: window.event;
	var tgt = window.event ? window.event.srcElement : e.target;
	var vl = tgt.parentNode.getElementsByTagName('input')[0];
	var text = tgt.parentNode.getElementsByTagName('span')[0];
	var texts = ["Bad", "Normal", "Fine"];
	objs = tgt.parentNode.getElementsByTagName('div');
	
	switch(e.type) {
		case "mouseover":
			for (i = 0; i < objs.length; i++) {
				if (Number(objs[i].className.substr(1, 1)) > Number(tgt.className.substr(1, 1))) {
					if (Number(objs[i].className.substr(1, 1)) > Number(vl.value)) {
						objs[i].style.backgroundPosition = '0px -0px';
					} else {
						objs[i].style.backgroundPosition = '0px -40px';
					}
				} else {
					objs[i].style.backgroundPosition = '0px -20px';
					CleanNode(text);
					text.appendChild(document.createTextNode(texts[Number(i)]));
				}
			}
			break
		case "mouseout":
			for (i = 0; i < objs.length; i++) {
				if (Number(objs[i].className.substr(1, 1)) > Number(vl.value)) {
					objs[i].style.backgroundPosition = '0px -0px';
				} else {
					objs[i].style.backgroundPosition = '0px -40px';
				}
			}
			CleanNode(text);
			if (Number(vl.value)>0) {
				text.appendChild(document.createTextNode(texts[Number(vl.value)-1]));
			}
			break
		case "click":
			if (vl.value == tgt.className.substr(1, 1)) {
				for (i = 0; i < objs.length; i++) {
					objs[i].style.backgroundPosition = '0px -0px';
				}
				vl.value = "0";
				break;
			}
			
			vl.value = tgt.className.substr(1, 1);
			for (i = 0; i < objs.length; i++) {
				if (Number(objs[i].className.substr(1, 1)) > Number(vl.value)) {
					objs[i].style.backgroundPosition = '0px -0px';
				} else {
					objs[i].style.backgroundPosition = '0px -40px';
				}
			}
			CleanNode(text);
			text.appendChild(document.createTextNode(texts[Number(vl.value)-1]));
			break
		default:
	}
}
function ratingColor(e) {
	e = (e) ? e: window.event;
	var tgt = window.event ? window.event.srcElement : e.target;
	var vl = tgt.parentNode.getElementsByTagName('input')[0];
	var text = tgt.parentNode.getElementsByTagName('span')[0];
	var texts = ["Bad", "Normal", "Fine"];
	var colors = ["0px", "-20px", "-40px"];
	objs = tgt.parentNode.getElementsByTagName('div');
	objCol = Number(tgt.className.substr(1, 1)-1);
	
	switch(e.type) {
		case "mouseover":
			for (i = 0; i < objs.length; i++) {
				if (Number(objs[i].className.substr(1, 1)) > Number(tgt.className.substr(1, 1))) {
						objs[i].style.backgroundPosition = '0px -0px';
				} else {
					objs[i].style.backgroundPosition = colors[objCol] + ' -20px';
					CleanNode(text);
					text.appendChild(document.createTextNode(texts[Number(i)]));
				}
			}
			break
		case "mouseout":
			for (i = 0; i < objs.length; i++) {
				if (Number(objs[i].className.substr(1, 1)) > Number(vl.value)) {
					objs[i].style.backgroundPosition = '0px -0px';
				} else {
					objs[i].style.backgroundPosition = colors[Number(vl.value)-1] + ' -40px';
				}
			}
			CleanNode(text);
			if (Number(vl.value)>0) {
				text.appendChild(document.createTextNode(texts[Number(vl.value)-1]));
			}
			break
		case "click":
			if (vl.value == tgt.className.substr(1, 1)) {
				for (i = 0; i < objs.length; i++) {
					objs[i].style.backgroundPosition = '0px -0px';
				}
				vl.value = "0";
				break;
			}
			
			vl.value = tgt.className.substr(1, 1);
			for (i = 0; i < objs.length; i++) {
				if (Number(objs[i].className.substr(1, 1)) > Number(vl.value)) {
					objs[i].style.backgroundPosition = '0px -0px';
				} else {
					objs[i].style.backgroundPosition = colors[objCol] + ' -40px';
				}
			}
			CleanNode(text);
			text.appendChild(document.createTextNode(texts[Number(vl.value)-1]));
			break
		default:
	}
}
// showField  arguments: event; showing element; switch value
function showField (e, field, triger) {
	e = (e) ? e: window.event;
	var tgt = window.event ? window.event.srcElement : e.target;
	if (tgt.value == triger) {
		document.getElementById(field).style.display = "block";
	} else {
		document.getElementById(field).style.display = "none";
	}
}