var ua = navigator.userAgent.toLowerCase(),
isOpera = (ua.indexOf('opera') > -1),
isSafari = (ua.indexOf('safari') > -1),
isGecko = (!isOpera && !isSafari && ua.indexOf('gecko') > -1),
isIE = (!isOpera && ua.indexOf('msie') > -1); 

function getComputedHeight(theElt){
   var ret = 0;
        if(isIE){
                ret = theElt.offsetHeight;
        }
        else{
                t = document.defaultView.getComputedStyle(theElt, "").getPropertyValue("height");
                tm = t.split('px');
                ret = tm[0];
        }
        return ret;
}

function getComputedWidth(theElt){
   var ret = 0;
   if (theElt) {
        if(isIE){
                ret = theElt.offsetWidth;
        }
        else{
                var tmp = document.defaultView.getComputedStyle(theElt, "").getPropertyValue("width");
                tmp = tmp.split('px');
                ret = tmp[0];
        }   
   }
   return ret;
}

function findPosistion(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function getViewportWidth() {
    var width = self.innerWidth;  // Safari
    var mode = document.compatMode;
        
    if (mode || isIE) { // IE, Gecko, Opera
        width = (mode == 'CSS1Compat') ?
                document.documentElement.clientWidth : // Standards
                document.body.clientWidth; // Quirks
    }
    return width;
}

function getPageX(ev) {
   if ( isIE ) {
       var x = ev.clientX || 0;
       x += getScroll()[0];
   } else {
       var x = ev.pageX;                    
   }
    return x;
}

function getScroll() {
    var dd = document.documentElement, db = document.body;
    if (dd && (dd.scrollTop || dd.scrollLeft)) {
        return [dd.scrollTop, dd.scrollLeft];
    } else if (db) {
        return [db.scrollTop, db.scrollLeft];
    } else {
        return [0, 0];
    }
}

function getCookie(/*String*/name){
	var idx = document.cookie.lastIndexOf(name+'=');
	if(idx == -1) { return null; }
	var value = document.cookie.substring(idx+name.length+1);
	var end = value.indexOf(';');
	if(end == -1) { end = value.length; }
	value = value.substring(0, end);
	value = unescape(value);
	return value; //String
}
/********************* form validation ***********************/
function isValidEmail(strEmail){
  validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
    if (strEmail!=null && strEmail.search(validRegExp) == -1) 
   {
      return false;
    } 
    return true; 
}

/***************** handle form submitting *********************/
var handleSuccess = function(o){
	if(o!= null && o.responseText !== undefined){
		showMessage(o.responseText);
	} else {
		showMessage("Response is not defined.");
	}
};

var handleFailure = function(o){
	if(o!= null && o.responseText !== undefined){
		showMessage("<li>HTTP status: " + o.status 
		+ "</li><li>Status code message: " + o.statusText + "</li>");
	} else {
	 	showMessage("Response is not defined.");
	}
};

var callback =
{
  success:handleSuccess,
  failure:handleFailure,
  argument:['name','thisisatest']
};

function makeRequest(formName, jsp){
    var formObject = document.getElementById(formName);   
    YAHOO.util.Connect.setForm(formObject);   
    var cObj = YAHOO.util.Connect.asyncRequest('POST', jsp, callback);
    return false;
}


/**********************************not util*****************************************/
var req;
var urx;

function showHtml(d, n) {
 if(window.XMLHttpRequest) {
   req = new XMLHttpRequest();
   req.onreadystatechange=processReqChange;
   urx =  n+"?"+d;
   req.open("GET", n+"?"+d, true);
   req.send(null);
 } else if(window.ActiveXObject) {
  req = new ActiveXObject("Microsoft.XMLHTTP");
  if(req) {
   req.onreadystatechange=processReqChange;
   urx =  n+".jsp?"+d;
   req.open("GET", n+"?"+d, true);
   req.send();
  }
 }
}
 
 function processReqChange() {
  showMessage("<font color=red>Please wait ......</font>");
  if (req.readyState == 4) {
   if (req.status == 200) {
    showMessage(req.responseText);
    req = null;
   } else {
    if (req.status == 401 ) {
      showMessage("<br><br>Access denied. Error code: 401<br><br>");
    } else {
      showMessage("HTTP Error: "+req.status+" - " + urx);
    }
   }
  }
 }

function show(name, qs, jsp) {
 if (qs ==0 || qs=="") {
   qs = Math.random();
 } else {
 	qs = qs+"&zzzz="+Math.random();
 }
 var div = document.getElementById("win");
 div = document.getElementById(name);
 div.style.visibility='visible';
 div.style.border="1px solid blue";
 div.style.width="600px";
 div.style.padding="0px";
 div.style.position="absolute";
 div.style.textAlign="left";
 div.style.backgroundColor="#eeeeee";
 width = getComputedWidth(div);
 x = getViewportWidth(); 
 div.style.left=""+(x-width)/2+"px";
 div.style.top="170px";

 showHtml(qs, jsp);
}

function showMessage(value) {
 var div = document.getElementById("win");
 if (div !==undefined && div != null) {
	 div.innerHTML= "<a href=\"#\"  onclick=\"closeIt()\"><img alt=\"close\" style=\"margin:3px;cursor:pointer;border:0px;float:right\" src=\"/img/close.gif\"/></a><div style=\"padding:10px;\">"+value+"</div>";
 } else {
 	alert("can't find document window.")
 }
}

function hideMessage() {
 var div = document.getElementById("win");
 div.innerHTML= "";
 div.style.visibility = "hidden";
}

function showErrMessage(value) {
 var div = document.getElementById("err");
 div.innerHTML= value;
 div.style.visibility = "visible";
}

function hideErrMessage() {
 var div = document.getElementById("err");
 div.innerHTML= "";
// div.style.visibility = "hidden";
}

function closeIt() {
 var div = document.getElementById("win");
 div.style.visibility = 'hidden';
}
/******************************** app only ******************************/
function signin(formName) {
	
    var ret = false;
    ret = isValidEmail(document.forms[formName].email.value) && (document.forms[formName].pwd.value != "");
    if (ret) {
		hideErrMessage();
		makeRequest(formName, "/java/action/login.jsp");
    } else {
	    s="\u0053\u006f\u0072\u0072\u0079\u002c\u0020\u0065\u0069\u0074\u0068\u0065\u0072\u0020\u0065\u006d\u0061\u0069\u006c\u0020\u0061\u0064\u0064\u0072\u0065\u0073\u0073\u0020\u006f\u0072\u0020\u0070\u0061\u0073\u0073\u0077\u006f\u0072\u0064\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0063\u006f\u0072\u0072\u0065\u0063\u0074\u002e";
    	showErrMessage(s);
    }
}

function register(formName) {
 if (isValidEmail(document.forms[formName].email.value)) {
		hideErrMessage();
		makeRequest(formName, "/java/action/signup.jsp");
 } else {
	    s="\u0053\u006f\u0072\u0072\u0079\u002c\u0020\u0074\u0068\u0069\u0073\u0020\u0065\u006d\u0061\u0069\u006c\u0020\u0061\u0064\u0064\u0072\u0065\u0073\u0073\u0020\u0069\u0073\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u002e";
    	showErrMessage(s);
 }
}

function resetPassword(formName) {
 if (isValidEmail(document.forms[formName].email.value)) {
		hideErrMessage();
		makeRequest(formName, "/java/action/reset.jsp");
 } else {
	    s="\u0053\u006f\u0072\u0072\u0079\u002c\u0020\u0074\u0068\u0069\u0073\u0020\u0065\u006d\u0061\u0069\u006c\u0020\u0061\u0064\u0064\u0072\u0065\u0073\u0073\u0020\u0069\u0073\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u002e";
    	showErrMessage(s);
 }
}

function changePassword(formName) {
		makeRequest(formName, "/java/action/change_password.jsp");
}

function changeName(formName) {
		makeRequest(formName, "/java/action/change_name.jsp");
}

function hidepost(formName) {
		makeRequest(formName, "/java/action/hide_post_0.jsp");
}

function replypost(formName) {
		makeRequest(formName, "/java/action/reply_0.jsp");
}

function contact(formName) {
		makeRequest(formName, "/java/show/send_contact.jsp");
}

