function addLoadEvent(func) {
    var oldonLoad = window.onload;
    if (typeof window.onload != 'function') {
            window.onload = func;
    }else {
        window.onload = function(){
            oldonLoad();
            func();
        }
    }
}
function getElementsByClassName(clsName,parentNode) {
 var arr = new Array();
 if (parentNode == null) {
  var elems = document.getElementsByTagName("*");
 } else {
  var elems = parentNode.getElementsByTagName("*");
 }
 for ( var cls, i = 0; ( elem = elems[i] ); i++ ) {
  if ( elem.className == clsName ) {
   arr[arr.length] = elem;
  }
 }
 return arr;
}
addLoadEvent(cardGame);
var cards = new Array();
function cardGame() {
    if (!document.getElementById("cardGame"))return false;
    if (!document.getElementById("cardGame").getElementsByTagName("img"))return false;
    var box = document.getElementById("cardGame");

    if (box.getElementsByTagName("p")){
        var p_el = box.getElementsByTagName("p");
        for (var i=0;i<p_el.length;i++){
            p_el[i].parentNode.removeChild(p_el[i]);
        }
    }
    var cards_el = box.getElementsByTagName("img");

    var p_el = document.createElement("p");
    var a_el = document.createElement("a");
	a_el.href = "http://kongbaguni.net/project/javascript-game/cardGame/cardgameRank.php?difficulty=" + ((cards_el.length-1)*2);
	var text = document.createTextNode("Ranking");
	a_el.appendChild(text);
	p_el.appendChild(a_el);
	box.appendChild(p_el);
	


    for (i=0;i<cards_el.length;i++){
        cards_el[i].className = "hidden";
    }
    for (i=0;i<cards_el.length-1;i++){
        var a_el = document.createElement("a");
        a_el.href = "#";
        var temp = cards_el[i+1].cloneNode(true);
        temp.className="front";
        temp.alt = i+"번째 카드 앞면 ";
        a_el.appendChild(temp);
        temp = cards_el[0].cloneNode(true);
        temp.className="back";
        temp.alt = "카드 뒷면"; 
        a_el.appendChild(temp);
        var a_el2 = a_el.cloneNode(true);
        cards[i] = a_el;
        cards[i+cards_el.length-1] = a_el2;
    }
    var randomCards = new Array();
    var div_el = document.createElement("div");
    div_el.count = 0;
    div_el.totalcount = 0;
    div_el.selectCards = new Array();
    div_el.className = "box";
    for (i=0;i<cards.length;i++){
        randomCards[i] = Math.floor(Math.random(1)*cards.length);
        for (j=0;j<i;j++){
            if (randomCards[j] == randomCards[i])i--;
        }
        div_el.appendChild(cards[randomCards[i]]);
                if(cards[randomCards[i]].getElementsByTagName("span").length==0){
                    var text = document.createTextNode(i);
                    var span_el =document.createElement("span");
                    span_el.appendChild(text);
                    cards[randomCards[i]].appendChild(span_el);
                }
        cards[randomCards[i]]._id = i;
        cards[randomCards[i]]._false = false;
        cards[randomCards[i]].onclick = function () {
            if (this._false == true) return false;
            this.parentNode.selectCards[this.parentNode.count]=this._id;
            if (this.parentNode.count>1){
                this.parentNode.count=0;
                var cardA = this.parentNode.childNodes[this.parentNode.selectCards[0]]._id;
                var cardB = this.parentNode.childNodes[this.parentNode.selectCards[1]]._id;
                cardA = this.parentNode.childNodes[cardA].childNodes[0].alt;
                cardB = this.parentNode.childNodes[cardB].childNodes[0].alt;
                if (cardA != cardB){
                    for (i=0;i<2;i++){
                        this.parentNode.childNodes[this.parentNode.selectCards[i]].childNodes[1].className = "block";
                        this.parentNode.childNodes[this.parentNode.selectCards[i]]._false = false;
                    }
                    this.parentNode.count = 0;
                }
                if (cardA == cardB){
                    for (i=0;i<2;i++){
                        this.parentNode.childNodes[this.parentNode.selectCards[i]].onclick = function () {
                            return false;
                        }
                        this.parentNode.childNodes[this.parentNode.selectCards[i]].className = "selected";
                    }
                }
                this.parentNode.selectCards[this.parentNode.count]=this._id;
            }
            this.childNodes[1].className="hidden";
            this.parentNode.count++;
            this._false = true;
            this.parentNode.totalcount ++;
			cards.Length = Math.floor(this.parentNode.totalcount/2);
            var txt = document.createTextNode("카드 뒤집은 횟수  : "+cards.Length);

            var span = document.createElement("span");
            span.className = "count";
            span.appendChild(txt);
            this.parentNode.appendChild(span);
            this.parentNode.removeChild(this.parentNode.childNodes[this.parentNode.childNodes.length-2]);
            return false;
        }
    }
    var p_el = document.createElement("p");
    p_el.className="desc";
    var txt = document.createTextNode("똑같은카드 2장을 찾으세요.");
    p_el.appendChild(txt);
    div_el.appendChild(p_el);
    box.appendChild(div_el);
    
    for (i=0;i<cards.length;i++){
        cards[i].childNodes[1].className = "hidden";
        cards[i]._onclick = cards[i].onclick;
        cards[i].onclick = function (){return false;}
        cards[i].className = "selected";
    }
    var text = document.createTextNode("시작하기");
    var a_el = document.createElement("a");
    a_el.appendChild(text);
    a_el.href="#";
    a_el.className = "start";
    cards[0].parentNode.appendChild(a_el);
    a_el.onclick = function (){
        var CNlist = this.parentNode.childNodes;
        this.parentNode.removeChild(this);
        for (i=0;i<CNlist.length;i++){
            for (j=0;j<CNlist[i].childNodes.length;j++){
                if (CNlist[i].childNodes[j].className == "hidden"){
                    CNlist[i].childNodes[j].className="block";
                }            
            }
            CNlist[i].onclick=function(){this._onclick(); return false;}
            CNlist[i].className = "unselected";
        }
        cards.interval = setInterval("cardGameTimer();",1000);
        return false;
    }    
}
var time=0;
function cardGameTimer() {
    time++;
    var text = document.createTextNode("경과시간 : " + time);
    var span_el = document.createElement("span");
    span_el.className = "timer";
    span_el.appendChild(text);
    var box = document.getElementById("cardGame");
    box.appendChild(span_el);
    if (box.childNodes[box.childNodes.length-2].nodeName=="SPAN"){
        box.removeChild(box.childNodes[box.childNodes.length-2]);
    }
    var timeOut = 0;    
    for (i=0;i<cards.length;i++){
        if (cards[i].childNodes[1].className != "hidden"){
            timeOut ++;        
        }
    }
    if (timeOut == 0){
        time--;
        clearInterval(cards.interval);
		gameover(time,cards.Length,cards.length);
    }        
}

function gameover(time,count,cardsLength){
	var box = document.getElementById("cardGame");
	var form_el = document.createElement("form");
	form_el.method = "post";
	form_el.action = "http://kongbaguni.net/project/javascript-game/cardGame/cardgameRank.php";
	var point = (2*cardsLength)-time + (cardsLength - count);
	var text = ("[경과시간:"+time+"초] [카드 뒤집은 횟수:"+count+"회] [점수:"+point+"점]");
	insertTag(form_el,"h2","게임종료");
	insertTag(form_el,"p",text);
	var input_value = new Array();
	for (i=0;i<12;i++){
		input_value[i]= new Array();
	}

	input_value[0]["value"] = time;
	input_value[0]["name"] = "time";
	input_value[0]["type"] = "hidden";

	input_value[1]["value"] = count;
	input_value[1]["name"] = "cardsLength";
	input_value[1]["type"] = "hidden";

	input_value[2]["value"] = point;
	input_value[2]["name"] = "point";
	input_value[2]["type"] = "hidden";

	input_value[3]["value"] = "";
	if (getCookie("kongbaguni-user-name")) input_value[3]["value"] = getCookie("kongbaguni-user-name");
	input_value[3]["name"] = "name";
	input_value[3]["type"] = "text";
	
	input_value[4]["value"] = "http://";
	input_value[4]["name"] = "homepage";
	input_value[4]["type"] = "text";

	input_value[5]["value"] = Math.ceil(Math.random(1)*100000000);
	input_value[5]["name"] = "id";
	input_value[5]["type"] = "hidden";
	
	input_value[6]["value"] = cardsLength;
	input_value[6]["name"] = "difficulty";
	input_value[6]["type"] = "hidden";
	
	input_value[7]["value"]= "";
	input_value[7]["name"] = "comment";
	input_value[7]["type"] = "text";

	input_value[8]["value"] = location.href;
	input_value[8]["name"] = "locationUrl";
	input_value[8]["type"] = "hidden";

   	input_value[9]["value"] = "스코어를 기록합니다";
    input_value[9]["type"] = "submit";

	var rnd = Math.ceil(Math.random(1)*(cards.length-1));
	input_value[10]["value"] = cards[1].childNodes[0].src;
	input_value[10]["name"] = "firstCardImgSrc";
	input_value[10]["type"] = "hidden";
	
	var Today = new Date();
	var year = Today.getFullYear();
	var mounth = Today.getMonth();
	if (mounth < 10) mounth = "0" + mounth;
	var date = Today.getDate();
	if (date < 10) date = "0"+ date;
	var hour = Today.getHours();
	if (hour < 10) houre = "0" + hour;
	var miniutes = Today.getMinutes();
	if (miniutes < 10) miniutes = "0"+miniutes;
	var second = Today.getSeconds();
	if (second < 10) second = "0"+second;

	var date_time = year+"-"+mounth+"-"+date+" "+hour+":"+miniutes+":"+second;

	input_value[11]["value"] = date_time;
	input_value[11]["name"] = "date_time";
	input_value[11]["type"] = "hidden";


	var p_el = document.createElement("p");
	for (i=0;i<input_value.length;i++){
	var label_el = document.createElement("label");
		var input = document.createElement("input");
		if (input_value[i]["name"])input.name = input_value[i]["name"];
		if (i==3){
			insertTag(label_el,"span","이름 : ");
			label_el.className = "name";
			label_el.setAttribute("for","name");
		}
		if (i==4){
			insertTag(label_el,"span","Homepage : ");
			label_el.className = "homepage";
			label_el.setAttribute("for","homepage");
		}
		if (i==7){
			insertTag(label_el,"span","한마디 : ");
			label_el.className = "comment";
			label_el.setAttribute("for","comment");
		}
		input.setAttribute("value",input_value[i]["value"]);
		input.setAttribute("type",input_value[i]["type"]);
		label_el.appendChild(input);
		p_el.appendChild(label_el);
	}
	form_el.appendChild(p_el);
	form_el.onsubmit = function(){
		if (this.name.value==""){
			alert("이름 적으셔야죠");
			this.name.focus();
			return false;
		}
		var str = this.homepage.value;
		if (str.substring(0,7)!= "http://") {
			this.homepage.value = "http://"+ str;
			return false;
		}else if (str == "http://"){
			this.homepage.value = "";
		} 
		setCookie("kongbaguni-user-name",this.name.value);
	}
	box.appendChild(form_el);
}

