var gs_SSO_PROTOCOL= "https://";
var gs_SSO_DOMAIN  = "sso.kisti.re.kr/ks20/";

//var gs_SSO_PROTOCOL= "http://";
//var gs_SSO_DOMAIN  = "sso.kisti.dev:8089/ks20/";
var gs_SSO_CALLURL = "sso_process.do";

var gs_SSOURL = gs_SSO_PROTOCOL + gs_SSO_DOMAIN + gs_SSO_CALLURL;

var gs_returnURL= "";
//http://sso.kisti.re.kr/ks20/sso_process.do

Number.prototype.to2 = function() { return (this > 9 ? "" : "0")+this; };
Date.MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
Date.DAYS   = ["Sun", "Mon", "Tue", "Wed", "Tur", "Fri", "Sat"];
Date.prototype.getDateString = function(dateFormat) {
  var result = "";
  
  dateFormat = dateFormat == 8 && "YYYY.MM.DD" ||
               dateFormat == 6 && "hh:mm:ss" ||
               dateFormat ||
               "YYYY.MM.DD hh:mm:ss";
  for (var i = 0; i < dateFormat.length; i++) {
    result += dateFormat.indexOf("YYYY", i) == i ? (i+=3, this.getFullYear()                     ) :
              dateFormat.indexOf("YY",   i) == i ? (i+=1, String(this.getFullYear()).substring(2)) :
              dateFormat.indexOf("MMM",  i) == i ? (i+=2, Date.MONTHS[this.getMonth()]           ) :
              dateFormat.indexOf("MM",   i) == i ? (i+=1, (this.getMonth()+1).to2()              ) :
              dateFormat.indexOf("M",    i) == i ? (      this.getMonth()+1                      ) :
              dateFormat.indexOf("DDD",  i) == i ? (i+=2, Date.DAYS[this.getDay()]               ) :
              dateFormat.indexOf("DD",   i) == i ? (i+=1, this.getDate().to2()                   ) :
              dateFormat.indexOf("D"   , i) == i ? (      this.getDate()                         ) :
              dateFormat.indexOf("hh",   i) == i ? (i+=1, this.getHours().to2()                  ) :
              dateFormat.indexOf("h",    i) == i ? (      this.getHours()                        ) :
              dateFormat.indexOf("mm",   i) == i ? (i+=1, this.getMinutes().to2()                ) :
              dateFormat.indexOf("m",    i) == i ? (      this.getMinutes()                      ) :
              dateFormat.indexOf("ss",   i) == i ? (i+=1, this.getSeconds().to2()                ) :
              dateFormat.indexOf("s",    i) == i ? (      this.getSeconds()                      ) :
                                                   (dateFormat.charAt(i)                         ) ;
  }
  return result;
};


function gf_ssoProcess(ao_frm, as_requestType, as_retrunURL, as_siteNum){
	var strxmldata = gf_makeSSoXml(ao_frm, as_requestType, as_retrunURL,as_siteNum);
	gf_makeiFrame();
	var ofrm = gf_makeSSoForm();

	if(ofrm != null) {	
		ofrm.xmldata.value = strxmldata;
		ofrm.server_num.value = as_siteNum;
		ofrm.requestType.value=as_requestType;
		ofrm.returnURL.value =gs_returnURL;
		ofrm.action = gs_SSOURL;
		ofrm.target = "ssoifrm";
		//alert(ofrm.action);
		ofrm.submit();
	}
}


function gf_getSsoXml (ao_frm, as_requestType, as_retrunURL, as_siteNum){
	var strxmldata = gf_makeSSoXml(ao_frm, as_requestType, as_retrunURL,as_siteNum);
	return strxmldata;
}



function gf_CreateDom(){
	var domObj;
	if (window.ActiveXObject)
	{
		domObj = new ActiveXObject("Microsoft.XMLDOM");
		
	} else {
		// code for Mozilla, Firefox, Opera..
		var parser = new DOMParser();
		domObj = parser.parseFromString(req.responseText, "text/xml");
	}
	return domObj;
}

function gf_makeSSoXml(ao_frm, as_reqeustType, as_returnUrl, as_siteCode){
	var frm = ao_frm;		
	var xmlDoc = gf_CreateDom();
	var PInode = xmlDoc.createProcessingInstruction("xml","version='1.0' encoding='utf-8'");
	var RootNode = xmlDoc.createElement("request");
	var Headernode = xmlDoc.createElement("header");
	var requestTypenode = xmlDoc.createElement("requestType");
	var requestDatenode = xmlDoc.createElement("requestDate");
	var siteCodenode = xmlDoc.createElement("siteCode");
	var returnURLnode = xmlDoc.createElement("returnURL");
	
	
	xmlDoc.appendChild(PInode);
	xmlDoc.appendChild(RootNode);
		
	
	var elName = "";
	var elValue = "";
	var argStr = new Array();
	var argCnt = 0;
	
	
	var sStr_userid 	= "";
	var sStr_username 	= "";
	var sStr_foreign_username 	= "";
	var sStr_userengname = "";
	var sStr_password 	= "";
	var sStr_companyid 	= "";
	var sStr_company 	= "";
	var sStr_branch 	= "";
	var sStr_addrtype 	= "";
	var sStr_phone 		= "";
	var sStr_fax 		= "";
	var sStr_zipcode 	= "";
	var sStr_addr_1 	= "";
	var sStr_addr_2		= "";
	var sStr_email 		= "";
	var sStr_hpno 		= "";
	var sStr_mailflag 	= "";
	var sStr_smsflag 	= "";
	var sStr_auth_code 	= "";
	var sStr_ipin 	    = "";
	var sStr_ssn_code 	= "";
	var sStr_userpart 	= "";
	var sStr_degree 	= "";
	var sStr_major 		= "";
	var sStr_subject 	= "";
	var sStr_job		= "";
	var sStr_post 		= "";
	var sStr_country 	= "";
	var sStr_birthday 	= "";
	var sStr_sex 		= "";
	var sStr_comseq1 	= "";
	var sStr_comseq2 	= "";
	var sStr_comseq3 	= "";
	var sTemp_Phone_0 = "";
	var sTemp_Phone_1 = "";
	var sTemp_Phone_2 = "";
	var sTemp_Phone_3 = "";
	var sTemp_Fax_0 = "";
	var sTemp_Fax_1 = "";
	var sTemp_Fax_2 = "";
	var sTemp_Fax_3 = "";
	var sTemp_HP_0 = "";
	var sTemp_HP_1 = "";
	var sTemp_HP_2 = "";
	var sTemp_HP_3 = "";	
	var sTemp_Email_1 = "";
	var sTemp_Email_2 = "";
	

		for( inx = 0; inx < frm.elements.length; inx++) {
			elName =  frm.elements[inx].name;
			elValue =  frm.elements[inx].value;
			// alert("elName=="+elName+"...."+"elValue=="+elValue);
			if(frm.elements[inx].type.toLowerCase() == "radio"
				&& frm.elements[inx].checked == true) {
					switch (elName.toLowerCase()){
						case "sex":
							sStr_sex = elValue;
							break;
						case "addrtype":
							sStr_addrtype = elValue;
							break;
						case "mailflag":
							sStr_mailflag = elValue;
							break;
						case "smsflag":
							sStr_smsflag = elValue;
							break;
						default :
							argStr[argCnt] =  elName + "=" + elValue;
							argCnt ++;
							break;
					}
			} else if (frm.elements[inx].type.toLowerCase() == "select-one") {
				switch (elName.toLowerCase()){
						case "country":
							sStr_country = elValue;
							break;
						case "phone_0":
							sTemp_Phone_0 = elValue;
							break;
						case "phone_1":
							sTemp_Phone_1 = elValue;
							break;
						case "fax_0":
							sTemp_Fax_0 = elValue;
							break;
						case "fax_1":
							sTemp_Fax_1 = elValue;
							break;
						case "hpno_0":
							sTemp_HP_0 = elValue;
							break;
						case "hpno_1":
							sTemp_HP_1 = elValue;
							break;	
						case "email_dcode":
							break;
						case "job1":
							break;
						case "job2":
							break;
						case "job3":
							break;
						case "post":
							sStr_post = elValue;
							break;
						case "degree":
							sStr_degree = elValue;
							break;
						case "major1":
							break;
						case "major2":
							break;
						case "subject":
							sStr_subject = elValue;
							break;		
						case "job":
							sStr_job = elValue;
							break;
						case "major":
							sStr_major = elValue;
							break;				
						default :
							argStr[argCnt] =  elName + "=" + elValue;
							argCnt ++;
							break;
					}				
				
			}else if (frm.elements[inx].type.toLowerCase() == "text"){
				switch (elName.toLowerCase()){
						case "userid":
							sStr_userid = elValue;
							break;
						case "username":
							sStr_username = elValue;
							break;
						case "userengname":
							sStr_userengname = elValue;
							break;
						case "foreign_username":
							sStr_foreign_username = elValue;
							break;
						case "comseq1":
							sStr_comseq1 = elValue;
							break;
						case "comseq2":
							sStr_comseq2 = elValue;
							break;
						case "comseq3":
							sStr_comseq3 = elValue;
							break;	
						case "birthday":
							sStr_birthday = elValue;
							break;
						case "zipcode":
							sStr_zipcode = elValue;
							break;
						case "addr_1":
							sStr_addr_1 = elValue;
							break;
						case "addr_2":
							sStr_addr_2 = elValue;
							break;
						case "phone_2":
							sTemp_Phone_2 = elValue;
							break;
						case "phone_3":
							sTemp_Phone_3 = elValue;
							break;
						case "fax_2":
							sTemp_Fax_2 = elValue;
							break;
						case "fax_3":
							sTemp_Fax_3 = elValue;
							break;
						case "hpno_2":
							sTemp_HP_2 = elValue;
							break;		
						case "hpno_3":
							sTemp_HP_3 = elValue;
							break;		
						case "email_1":
							sTemp_Email_1 = elValue;
							break;
						case "email_2":
							sTemp_Email_2 = elValue;
							break;	
						case "company":
							sStr_company = elValue;
							break;	
						case "branch":
							sStr_branch = elValue;
							break;	
						default :
							argStr[argCnt] =  elName + "=" + elValue;
							argCnt ++;
							break;
					}	
			}else if (frm.elements[inx].type.toLowerCase() == "hidden"){
				switch (elName.toLowerCase()){
						case "userpart":
							sStr_userpart = elValue;
							break;
						case "ssn_code":
							sStr_ssn_code = elValue;
							break;
						case "auth_code":
							sStr_auth_code = elValue;
							break;
						case "ipin":
							sStr_ipin = elValue;
							break;
						case "companyid":
							sStr_companyid = elValue;
							break;
						case "job":
							sStr_job = elValue;
							break;
						case "major":
							sStr_major = elValue;
							break;
						case "userid":
							sStr_userid = elValue;
							break;
						case "username":
							sStr_username = elValue;
							break;
						default :							
							break;
					}	
				
			}else{
				if(elName.toLowerCase() == "password")
					sStr_password = elValue;
			}
					
		}
		
		var argTempStr = "";
		if(argStr.length > 0) {
			for(var idx=0; idx < argStr.length; idx++){
				argTempStr += argStr[idx] + "&"
			}
			argTempStr = argTempStr.substring(0, argTempStr.length -1);
		}
		
		if(argTempStr !=""){
			as_returnUrl = as_returnUrl + "?" + argTempStr;
		}
		//promotion 가입정보 
		if(frm.prId.value != null)
		{
		as_returnUrl +=  "&prId="+frm.prId.value;
		
		}
		//promotion 가입정보 
		gs_returnURL = as_returnUrl;
			//header  정보 Setting
		var now = new Date();
		var sDate = now.getDateString("YYYY-MM-DD hh:mm:ss");
		
		var requestTypeTextNode = xmlDoc.createTextNode(as_reqeustType);
		var requestDateTextNode = xmlDoc.createTextNode(sDate);
		var siteCodeTextNode = xmlDoc.createTextNode(as_siteCode);
		var returnURLTextNode = xmlDoc.createTextNode(as_returnUrl);
		
		if(sTemp_Phone_2 != "" && sTemp_Phone_3 !="")  sStr_phone = sTemp_Phone_0 + "-" + sTemp_Phone_1 + "-" + sTemp_Phone_2 + "-" + sTemp_Phone_3;
		if(sTemp_Fax_2 != "" && sTemp_Fax_3 !="")  sStr_fax = sTemp_Fax_0 + "-" + sTemp_Fax_1 + "-" + sTemp_Fax_2 + "-" + sTemp_Fax_3;
		if(sTemp_HP_2 != "" && sTemp_HP_3 !="")  sStr_hpno = sTemp_HP_0 + "-" + sTemp_HP_1 + "-" + sTemp_HP_2 + "-" + sTemp_HP_3;
		if(sTemp_Email_1 != "" && sTemp_Email_2 !="")  sStr_email = sTemp_Email_1 + "@" + sTemp_Email_2;
	
		var useridTextNode = xmlDoc.createTextNode(sStr_userid);
		//국내,해외 구분 안함..
		if(sStr_userpart =="1" && as_reqeustType != "3"){
			var usernameTextNode = xmlDoc.createTextNode(sStr_foreign_username);
			var userengnameTextNode = xmlDoc.createTextNode(sStr_foreign_username);
		}			
		else {
			var usernameTextNode = xmlDoc.createTextNode(sStr_username);
			var userengnameTextNode = xmlDoc.createTextNode(sStr_userengname);
		}
		var passwordTextNode = xmlDoc.createTextNode(sStr_password);
		var companyidTextNode = xmlDoc.createTextNode(sStr_companyid);
		var companyTextNode = xmlDoc.createTextNode(sStr_company);
		
		var comseqTextNode = xmlDoc.createTextNode(sStr_comseq1+sStr_comseq2+sStr_comseq3);
		
		var branchTextNode = xmlDoc.createTextNode(sStr_branch);
		var addrtypeTextNode = xmlDoc.createTextNode(sStr_addrtype);
		var phoneTextNode = xmlDoc.createTextNode(sStr_phone);
		var faxTextNode = xmlDoc.createTextNode(sStr_fax);
		var zipcodeTextNode = xmlDoc.createTextNode(sStr_zipcode);
		var addr_1TextNode = xmlDoc.createTextNode(sStr_addr_1);
		var addr_2TextNode= xmlDoc.createTextNode(sStr_addr_2);
		var emailTextNode = xmlDoc.createTextNode(sStr_email);
		var hpnoTextNode = xmlDoc.createTextNode(sStr_hpno);
		var mailflagTextNode = xmlDoc.createTextNode(sStr_mailflag);
		var smsflagTextNode = xmlDoc.createTextNode(sStr_smsflag);
		var ssn_codeTextNode = xmlDoc.createTextNode(sStr_ssn_code);
		var userpartTextNode = xmlDoc.createTextNode(sStr_userpart);
		var auth_codeTextNode = xmlDoc.createTextNode(sStr_auth_code);
		var ipinTextNode = xmlDoc.createTextNode(sStr_ipin);
		var degreeTextNode = xmlDoc.createTextNode(sStr_degree);
		var majorTextNode = xmlDoc.createTextNode(sStr_major);
		var subjectTextNode = xmlDoc.createTextNode(sStr_subject);
		var jobTextNode = xmlDoc.createTextNode(sStr_job);
		var postTextNode = xmlDoc.createTextNode(sStr_post);
		var countryTextNode = xmlDoc.createTextNode(sStr_country);
		var birthdayTextNode = xmlDoc.createTextNode(sStr_birthday);
		var sexTextNode = xmlDoc.createTextNode(sStr_sex);

		
		var MetaDatanode = xmlDoc.createElement("metaData");
		var useridnode = xmlDoc.createElement("userid");
		var usernamenode = xmlDoc.createElement("username");
		var userengnamenode = xmlDoc.createElement("userengname");
		var comseqnode = xmlDoc.createElement("comseq");
		
		var passwordnode = xmlDoc.createElement("password");
		var companyidnode = xmlDoc.createElement("companyid");
		var companynode = xmlDoc.createElement("company");
		var branchnode = xmlDoc.createElement("branch");
		var addrtypenode = xmlDoc.createElement("addrtype");
		var phonenode = xmlDoc.createElement("phone");
		var faxnode = xmlDoc.createElement("fax");
		var zipcodenode = xmlDoc.createElement("zipcode");
		var addr_1node = xmlDoc.createElement("addr_1");
		var addr_2node= xmlDoc.createElement("addr_2");
		var emailnode = xmlDoc.createElement("email");
		var hpnonode = xmlDoc.createElement("hpno");
		var mailflagnode = xmlDoc.createElement("mailflag");
		var smsflagnode = xmlDoc.createElement("smsflag");
		var ssn_codenode = xmlDoc.createElement("ssn_code");
		var userpartnode = xmlDoc.createElement("userpart");
		var auth_codenode = xmlDoc.createElement("auth_code");
		var ipinnode = xmlDoc.createElement("ipin");
		var degreenode = xmlDoc.createElement("degree");
		var majornode = xmlDoc.createElement("major");
		var subjectnode = xmlDoc.createElement("subject");
		var jobnode = xmlDoc.createElement("job");
		var postnode = xmlDoc.createElement("post");
		var countrynode = xmlDoc.createElement("country");
		var birthdaynode = xmlDoc.createElement("birthday");
		var sexnode = xmlDoc.createElement("sex");

		RootNode.appendChild(Headernode);	
		Headernode.appendChild(requestTypenode);
		requestTypenode.appendChild(requestTypeTextNode);
		
		Headernode.appendChild(requestDatenode);
		requestDatenode.appendChild(requestDateTextNode);
		
		Headernode.appendChild(siteCodenode);
		siteCodenode.appendChild(siteCodeTextNode);
		
		Headernode.appendChild(returnURLnode);
		returnURLnode.appendChild(returnURLTextNode);
		
		//MetaData 정보 Setting
		RootNode.appendChild(MetaDatanode);	
		MetaDatanode.appendChild(useridnode);		
		useridnode.appendChild(useridTextNode);

		MetaDatanode.appendChild(usernamenode);
		usernamenode.appendChild(usernameTextNode);


		MetaDatanode.appendChild(comseqnode);
		comseqnode.appendChild(comseqTextNode);
		
		
		MetaDatanode.appendChild(userengnamenode);
		userengnamenode.appendChild(userengnameTextNode);

		MetaDatanode.appendChild(passwordnode);
		passwordnode.appendChild(passwordTextNode);
		
		MetaDatanode.appendChild(companyidnode);
		companyidnode.appendChild(companyidTextNode);
		
		MetaDatanode.appendChild(companynode);
		companynode.appendChild(companyTextNode);
		
		MetaDatanode.appendChild(branchnode);
		branchnode.appendChild(branchTextNode);
		
		MetaDatanode.appendChild(addrtypenode);
		addrtypenode.appendChild(addrtypeTextNode);
		
		MetaDatanode.appendChild(phonenode);
		phonenode.appendChild(phoneTextNode);
		
		MetaDatanode.appendChild(faxnode);
		faxnode.appendChild(faxTextNode);
		
		MetaDatanode.appendChild(zipcodenode);
		zipcodenode.appendChild(zipcodeTextNode);

		MetaDatanode.appendChild(addr_1node);
		addr_1node.appendChild(addr_1TextNode);
		
		MetaDatanode.appendChild(addr_2node);
		addr_2node.appendChild(addr_2TextNode);
		
		MetaDatanode.appendChild(emailnode);
		emailnode.appendChild(emailTextNode);
		
		MetaDatanode.appendChild(hpnonode);
		hpnonode.appendChild(hpnoTextNode);
		
		MetaDatanode.appendChild(mailflagnode);
		mailflagnode.appendChild(mailflagTextNode);

		MetaDatanode.appendChild(smsflagnode);
		smsflagnode.appendChild(smsflagTextNode);
		
		MetaDatanode.appendChild(ssn_codenode);
		ssn_codenode.appendChild(ssn_codeTextNode);
		
		MetaDatanode.appendChild(ipinnode);
		ipinnode.appendChild(ipinTextNode);
		
		MetaDatanode.appendChild(auth_codenode);
		auth_codenode.appendChild(auth_codeTextNode);
		
		MetaDatanode.appendChild(userpartnode);
		userpartnode.appendChild(userpartTextNode);
		
		MetaDatanode.appendChild(degreenode);
		degreenode.appendChild(degreeTextNode);
		
		MetaDatanode.appendChild(majornode);
		majornode.appendChild(majorTextNode);
		
		MetaDatanode.appendChild(subjectnode);
		subjectnode.appendChild(subjectTextNode);

		MetaDatanode.appendChild(jobnode);
		jobnode.appendChild(jobTextNode);
		
		MetaDatanode.appendChild(postnode);
		postnode.appendChild(postTextNode);
		
		MetaDatanode.appendChild(countrynode);
		countrynode.appendChild(countryTextNode);

		MetaDatanode.appendChild(birthdaynode);
		birthdaynode.appendChild(birthdayTextNode);

		MetaDatanode.appendChild(sexnode);
		sexnode.appendChild(sexTextNode);
		
		return xmlDoc.xml;
}



function gf_makeLoginForm(){
	var ofrm =  document.ssoLoginFrm;
	if(ofrm == null){
		var frmBody = "<form name='ssoLoginFrm' method='post'>";
		frmBody += "<input type='hidden' name='userid' value=''>";
		frmBody += "<input type='hidden' name='password' value=''>";
		frmBody += "<input type='hidden' name='returnURL' value=''>";
		frmBody += "<input type='hidden' name='server_num' value=''>";
		frmBody += "<input type='hidden' name='requestType' value=''>";
		frmBody += "</form>";
		document.body.insertAdjacentHTML("BeforeEnd", " " + frmBody + " ");
		ofrm =  document.ssoLoginFrm;
	}
	return ofrm;
}

function gf_makeiFrame(){
	
	var ifrm = document.getElementById("ssoifrm");
	if(ifrm == null) {
		var ifrmHTML = "<iframe name='ssoifrm' id='ssoifrm' src='' width='0' height='0' frameborder='0' title=''></iframe>";
		//document.body.appendChild =  ifrmHTML;
		document.body.insertAdjacentHTML("BeforeEnd", " " + ifrmHTML + " ");
		ifrm = document.getElementById("ssoifrm");
	}
	return;
}

function gf_makeSSoForm(){
	var ofrm =  document.ssoFrm;
	if(ofrm == null){
		var frmBody = "<form name='ssoFrm' method='post'>";
		frmBody += "<input type='hidden' name='xmldata' value=''>";
		frmBody += "<input type='hidden' name='server_num' value=''>";
		frmBody += "<input type='hidden' name='requestType' value=''>";
		frmBody += "<input type='hidden' name='returnURL' value=''>";
		frmBody += "</form>";
		document.body.insertAdjacentHTML("BeforeEnd", " " + frmBody + " ");
		ofrm =  document.ssoFrm;
	}
	return ofrm;
}


