function reset_page_height() {
    if ($("#pc").height() < ($(window).height()-283)) {
	var browser=navigator.appName;
	var b_version=navigator.appVersion;
	var version=parseFloat(b_version);
		
	if (browser=="Microsoft Internet Explorer" && version>=7) $("#pc").css(min-height,($(window).height()-283+'px'));
	else if (browser=="Microsoft Internet Explorer" && version<7) $("#pc").height($(window).height()-283+'px');
	else if (browser=="Netscape") $("#pc").css('minHeight',($(window).height()-283+'px'));
    }
}

function focus (name) {
	window.scrollTo(0,document.getElementById(name).offsetTop+($(document).height()/2));
	document.getElementById(name).select();
}

function goback() {
    $.ajax({
	type: "POST",
	url: "/goback.php",
	data: ""
    });
}

function serialize (txt) {
    switch(typeof(txt)){
	case 'string':
	    return 's:'+txt.length+':"'+txt+'";';
	case 'number':
	    if(txt>=0 && String(txt).indexOf('.') == -1 && txt < 65536) return 'i:'+txt+';';
	    return 'd:'+txt+';';
	case 'boolean':
	    return 'b:'+( (txt)?'1':'0' )+';';
	case 'object':
	    var i=0,k,ret='';
	    for(k in txt){
		//alert(isNaN(k));
		if(!isNaN(k)) k = Number(k);
		ret += serialize(k)+serialize(txt[k]);
		i++;
	    }
	    return 'a:'+i+':{'+ret+'}';
	default:
	    return 'N;';
	    alert('var undefined: '+typeof(txt));return undefined;
    }
}

function unserialize(txt){
    var level=0,arrlen=new Array(),del=0,finaal=new Array(),key=new Array(),save=txt;
    while(1){
	switch(txt.substr(0,1)){
	    case 'N':
		del = 2;
		ret = null;
		break;
	    case 'b':
		del = txt.indexOf(';')+1;
		ret = (txt.substring(2,del-1) == '1')?true:false;
		break;
	    case 'i':
		del = txt.indexOf(';')+1;
		ret = Number(txt.substring(2,del-1));
		break;
	    case 'd':
		del = txt.indexOf(';')+1;
		ret = Number(txt.substring(2,del-1));
		break;
	    case 's':
		del = txt.substr(2,txt.substr(2).indexOf(':'));
		ret = txt.substr( 1+txt.indexOf('"'),del);
		del = txt.indexOf('"')+ 1 + ret.length + 2;
		break;
	    case 'a':
		del = txt.indexOf(':{')+2;
		ret = new Array();
		arrlen[level+1] = Number(txt.substring(txt.indexOf(':')+1, del-2))*2;
		break;
	    case 'O':
		txt = txt.substr(2);
		var tmp = txt.indexOf(':"')+2;
		var nlen = Number(txt.substring(0, txt.indexOf(':')));
		name = txt.substring(tmp, tmp+nlen );
		//alert(name);
		txt = txt.substring(tmp+nlen+2);
		del = txt.indexOf(':{')+2;
		ret = new Object();
		arrlen[level+1] = Number(txt.substring(0, del-2))*2;
		break;
	    case '}':
		txt = txt.substr(1);
		if(arrlen[level] != 0){
		    alert('var missed : '+save); return undefined;
		};
		level--;
		continue;
	    default:
		if(level==0) return finaal;
		alert('syntax invalid(1) : '+save+"\nat\n"+txt+"level is at "+level);
		return undefined;
	}
	if(arrlen[level]%2 == 0){
	    if(typeof(ret) == 'object'){
		alert('array index object no accepted : '+save);return undefined;
	    }
	    if(ret == undefined){
		alert('syntax invalid(2) : '+save);return undefined;
	    }
	    key[level] = ret;
	} else {
	    var ev = '';
	    for(var i=1;i<=level;i++){
		if(typeof(key[i]) == 'number'){
		    ev += '['+key[i]+']';
		}else{
		    ev += '["'+key[i]+'"]';
		}
	    }
	    eval('finaal'+ev+'= ret;');
	}
	arrlen[level]--;
	if(typeof(ret) == 'object') level++;
	txt = txt.substr(del);
	continue;
    }
}

function strstr( haystack, needle, bool ) {
    var pos = 0;

    pos = haystack.indexOf( needle );
    if( pos == -1 ){
	return false;
    } else{
	if( bool ){
	    return haystack.substr( 0, pos );
	} else{
	    return haystack.slice( pos );
	}
    }
}

function print_r(theObj){
    if(theObj.constructor == Array ||
	theObj.constructor == Object) {
	var rtrn = "";
	rtrn += "<ul>";
	for(var p in theObj) {
	    if(theObj[p].constructor == Array || theObj[p].constructor == Object) {
		rtrn += "<li>["+p+"] => "+typeof(theObj)+"</li>";
		rtrn += "<ul>";
		rtrn += print_r(theObj[p]);
		rtrn += "</ul>";
	    } else {
		rtrn += "<li>["+p+"] => "+theObj[p]+"</li>";
	    }
	}
	rtrn += "</ul>";

	return rtrn;
    }
}

function array_key_exists ( key, search ) {
    if( !search || (search.constructor !== Array && search.constructor !== Object) ) {
	return false;
    }

    return key in search;
}

function decodeQuotes(str) {
    var ret = str.replace(/\\'/g, "'");
    ret = ret.replace(/\\"/g, '"');
    return ret;
}

function linkstr(str) {
    return decodeQuotes(str).replace(/"/g, '%22').replace(/ /g, '-').toLowerCase();
}

function trim(value) {
    value = value.replace(/^\s+/,'');
    value = value.replace(/\s+$/,'');
    return value;
}

String.prototype.reverse=function(){return this.split("").reverse().join("");}

Array.prototype.find = function (element) {
    for (var keys in this) {
	if (this[keys] == element) {
	    return keys;
	    break;
	}
    }
    return -1;
}

function isInt(x) {
    var y=parseInt(x);
    if (isNaN(y)) return false;
    return x==y && x.toString()==y.toString();
}