var lastChecked = "";
var lastCheckedDomain;

function verifyIP (IPvalue) {
	var isValidIp = true;
	var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
	var ipArray = IPvalue.match(ipPattern);

	if (IPvalue == "0.0.0.0") {
		isValidIp = false;
	}else if (IPvalue == "255.255.255.255") {
		isValidIp = false;
	}

	if (ipArray == null) {
		isValidIp = false;
	} else {
		for (i = 0; i < 4; i++) {
			thisSegment = ipArray[i];
			if (thisSegment > 255) {
				isValidIp = false;
				i = 4;
			}
			if ((i == 0) && (thisSegment > 255)) {
				isValidIp = false;
				i = 4;
			}
		}
	}
	return isValidIp;
}

function loadRegPeriod(status) {
	if (status == true) {
		var url = './svc.php';
		var params = 'type=domain';
		var opts = { 
			parameters:params,
			onSuccess:function(request){updateRegPeriod(request)},
			onFailure:function(request){
				alert(request.status)
			}
		};
		var myAjax = new Ajax.Request( url, opts );
	} else {
		updateSelection(document.getElementById("reg_period"), 'clear', null);
	}
} // end func

function updateRegPeriod(XMLHttpRequest) {
	var domainNameObj = document.getElementById('whois_domainname');
	var domainExtObj  = document.getElementById('whois_extension');
	var domainName    = domainNameObj.value;
	var domainCode    = domainExtObj.options[domainExtObj.selectedIndex].value;
	var domainExt     = domainExtObj.options[domainExtObj.selectedIndex].text;
	updateSelection(document.getElementById("reg_period"), 'clear', null);
	var RawData = XMLHttpRequest.responseText;
	var PkgAry = eval(RawData);
	for (var I=0; I<PkgAry.length; I++) {
		var PackageDetail = PkgAry[I];
		if (PackageDetail[0] == domainCode) {
			for (var J=0; J<PackageDetail[2].length; J++) {
				OptValue = PackageDetail[2][J][1];
				OptText = PackageDetail[2][J][0] + " [HK$" + OptValue + "]";
				var NewOpt = new Option(OptText,OptValue,false,false);
				updateSelection(document.getElementById("reg_period"),'append',NewOpt);
			}
			break;
		}
	}
}

function loadSvcType(status) {
	if (status == true) {
		var url = './svc.php';
		var params = 'type=svctype';
		var opts = { 
			parameters:params,
			onSuccess:function(request){
				var SvcTypeObj = document.getElementById('svc_type');
				var RawData = request.responseText;
				var SvcTypeAry = eval(RawData);
				updateSelection(document.getElementById("svc_type"), 'clear', null);
				for (var I=0; I<SvcTypeAry.length; I++) {
					var SvcTypeDetail = SvcTypeAry[I];
					OptValue = SvcTypeDetail[0];
					OptText = SvcTypeDetail[1] ;
					var NewOpt = new Option(OptText,OptValue,false,false);
					updateSelection(document.getElementById("svc_type"),'append',NewOpt);
				}
			},
			onFailure:function(request){
				alert(request.status)
			}
		};
		var myAjax = new Ajax.Request( url, opts );
	} else {
		updateSelection(document.getElementById("svc_type"), 'clear', null);
	}
} // end func

function loadPackage(status,type) {
	if (status == true) {
		var url = './svc.php';
		var params = 'type=svcpkg&pkgtype='+type;
		var opts = { 
			parameters:params,
			onSuccess:function(request){
				var SvcTypeObj = document.getElementById('pkg_code');
				var RawData = request.responseText;
				var SvcTypeAry = eval(RawData);
				updateSelection(document.getElementById("pkg_code"), 'clear', null);
				for (var I=0; I<SvcTypeAry.length; I++) {
					var SvcTypeDetail = SvcTypeAry[I];
					OptValue = SvcTypeDetail[0];
					OptText = SvcTypeDetail[1];
					var NewOpt = new Option(OptText,OptValue,false,false);
					updateSelection(document.getElementById("pkg_code"),'append',NewOpt);
				}
			},
			onFailure:function(request){
				alert(request.status)
			}
		};
		var myAjax = new Ajax.Request( url, opts );
	} else {
		updateSelection(document.getElementById("pkg_code"), 'clear', null);
	}
} // end func

var domain_info = {
	status :          document.getElementById("domain_status"),
	domain :          document.getElementById('whois_domainname'),
	extension :       document.getElementById('whois_extension'),
	register_period : document.getElementById('reg_period')
};
var service_info = {
	service_type :    document.getElementById('svc_type'),
	service_package : document.getElementById('pkg_code'),
	payment_terms :   document.getElementById('payment_terms')
};
var contact_info = {
	first_name :   document.getElementById('first_name'),
	last_name :    document.getElementById('last_name'),
	organization : document.getElementById('organization'),
	address1 :     document.getElementById('address1'),
	address2 :     document.getElementById('address2'),
	address3 :     document.getElementById('address3'),
	phone :        document.getElementById('phone'),
	fax :          document.getElementById('fax'),
	email :        document.getElementById('email')
};

function showHideObject(AffectObject, show) {
	if (typeof AffectObject != "object") {
		if (typeof AffectObject == "string") {
			AffectObject = document.getElementById(AffectObject);
		} else {
			return;
		}
	}
	switch(navigator.family) {
		case 'ie4':
			browserVersion = 1 //Simply means IE > 3.x
		break;
		case 'opera':
			browserVersion = (navigator.version > 6 ? 1 : 0); //opera7 has a good DOM
		break;
		case 'nn4':
			browserVersion = 2 //NS4.x 
		break;
		case 'gecko':
			browserVersion = 3 //NS6.x
		break;
		case 'safari':
			browserVersion = 1 //Safari Beta 3 seems to behave like IE in spite of being based on Konkeror
		break;
		default:
			browserVersion = 0 //other, possibly without DHTML  
		break;
	}
	if (browserVersion == 1 || browserVersion == 3) {
		AffectObject.style.display = (show)?"block":"none";
	} else {
		AffectObject.visibility = (show)?"show":"hidden";
	}
}

function checkDomain(domainName){
	var arr=new Array('.com','.net','.org','.com.hk','.net.hk','.org.hk','.idv.hk');
	var val=true;
	var dotPos=domainName.lastIndexOf(".");
	var domainName1=domainName.substring(0,dotPos);
	var tld=domainName.substring(dotPos,domainName.length);
	if( dotPos>1 && dotPos<57 ){
		for(var i=0; i<arr.length; i++){
			if(tld==arr[i]){
				val=true;
				break;
			}else{
				val=false;
			}
		}
		if(val==false){
			return false;
		}else{
			for(var j=0; j<domainName1.length; j++){
				var p=domainName1.charAt(j);
				var p2=p.charCodeAt(0);
				if( (p2>47 && p2<59) || (p2>64 && p2<91) || (p2>96 && p2<123) || p2==45 || p2==46){
					if( (j==0 || j==domainName1.length-1) && p2==45){
						return false;
					}
				}else{
					return false;
				}
			}
		}
	}else{
		return false;
	}
	return true;
}

function updateSelection(objSel, action, objOpt) {
	if (typeof objSel != "undefined") {
		if (objSel.type == "select-one") {
			switch (action) {
				case "clear":
					objSel.options.length = 0;
					break;
				case "append":
					objSel.options[objSel.options.length] = objOpt;
					break;
			}
		}
	}
}

function isAvailable() {
	var OutputArea    = document.getElementById('chkstatus');
	var PreloaderIcon = document.getElementById("preicon");
	var domainNameObj = document.getElementById('whois_domainname');
	var domainExtObj  = document.getElementById('whois_extension');
	var domainName    = domainNameObj.value
	var domainExt     = domainExtObj.options[domainExtObj.selectedIndex].text;
	var domain        = (domainName + domainExt).toLowerCase();
	if (lastCheckedDomain!=domain) {
	if (domainName.match("^[0-9a-zA-Z][0-9a-zA-Z\-]*[0-9a-zA-Z]$")) {
		lastCheckedDomain = domain;
		PreloaderIcon.innerHTML = "<img src=\"/sw_img/ajax-loader.gif\" alt=\"搜尋中...\"/>";

		var url = './whois.php';
		var params = 'output=available&query='+domain;
		var opts = { 
			parameters:params, 
			onSuccess:function(XMLHttpRequest){
				PreloaderIcon.innerHTML ="&nbsp;";
				switch (XMLHttpRequest.responseText) {
					case "1":
						OutputArea.innerHTML = FormMessage.AvailableMessage(domain);
						GenExtensionTerms(true);
						break;
					case "0":
						OutputArea.innerHTML = FormMessage.NotAvailableMessage(domain);
						GenExtensionTerms(true);
						break;
				}
			},
			onFailure:function(request){
				alert(request.status)
			}
		};
		var myAjax = new Ajax.Request( url, opts );
	} else {
		alert("域名格式錯誤");
	}
	}
}

function displayExtensionList() {
	var SelectionObject  = document.getElementById('whois_extension');
	updateSelection(SelectionObject, 'clear', null);
	for (var i=0; i<Service.ExtensionPrice.length; i++) {
		OptText = Service.ExtensionPrice[i][0];
		OptValue = Service.ExtensionPrice[i][0];
		var NewOpt = new Option(OptText,OptValue,false,false);
		updateSelection(SelectionObject,'append',NewOpt);
	}
}

function GenExtensionTerms(status) {
	var SelectionObject  = document.getElementById('reg_period');
	var domExtension  = document.getElementById('whois_extension');
	updateSelection(SelectionObject, 'clear', null);
	if (status==true){
	var ExtensionTerms = Service.ListExtensionTerms(domExtension.value);
	for (var i=0; i<ExtensionTerms.length; i++) {
		OptText = ExtensionTerms[i][1] + " [HK$" + ExtensionTerms[i][2] + "]";
		OptValue = ExtensionTerms[i][0] + "," + ExtensionTerms[i][2];
		var NewOpt = new Option(OptText,OptValue,false,false);
		updateSelection(SelectionObject,'append',NewOpt);
	}
	}
}

function displayServiceType() {
	var SelectionObject  = document.getElementById('svc_type');
	var ServiceType = Service.ServiceDetail;
	updateSelection(SelectionObject, 'clear', null);
	updateSelection(document.getElementById('pkg_code'), 'clear', null);
	updateSelection(document.getElementById('payment_terms'), 'clear', null);
	for (var i=0; i<ServiceType.length; i++) {
		OptText = ServiceType[i][1];
		OptValue = ServiceType[i][0]+","+ServiceType[i][1];
		var NewOpt = new Option(OptText,OptValue,false,false);
		updateSelection(SelectionObject,'append',NewOpt);
	}
} // end func

function displayPackage(SvcType) {
	var SelectionObject  = document.getElementById('pkg_code');
	var ServiceType = SvcType.split(",");
	var PackageType = Service.ListPackage(ServiceType[0]);
	updateSelection(SelectionObject, 'clear', null);
	updateSelection(document.getElementById('payment_terms'), 'clear', null);
	for (var i=0; i<PackageType.length; i++) {
		OptText = PackageType[i][1];
		OptValue = PackageType[i][0]+","+PackageType[i][1];
		var NewOpt = new Option(OptText,OptValue,false,false);
		updateSelection(SelectionObject,'append',NewOpt);
	}
} // end func

function displayPackageTerms(PkgCode) {
	var SelectionObject  = document.getElementById('payment_terms');
	var Package = PkgCode.split(",");
	var PackageTerms = Service.ListPackageTerms(Package[0]);
	updateSelection(SelectionObject, 'clear', null);
	for (var i=0; i<PackageTerms.length; i++) {
		OptText = PackageTerms[i][1] + " [HK$" + PackageTerms[i][2] + "]";
		if (PackageTerms[i][4] > 0) {
			OptText += " + " + PackageTerms[i][3] + " [HK$" + PackageTerms[i][4] + "]";
		}
		OptValue = PackageTerms[i][0] + "," + PackageTerms[i][2] + "," + PackageTerms[i][4];
		var NewOpt = new Option(OptText,OptValue,false,false);
		updateSelection(SelectionObject,'append',NewOpt);
	}
} // end func

function initRegistration() {
	displayExtensionList();
	displayServiceType();
}

function CleanContact() {
	for (i in contact_info) {
		contact_info[i].value = "";
	}
}

function CheckSelectionBox(SelObjId) {
	switch (typeof SelObjId) {
		case "object":
			var SelectionObject  = SelObjId;
		case "string":
			var SelectionObject  = document.getElementById(SelObjId);
			break;
	}

	for (var i=0; i<SelectionObject.options.length; i++) {
		if (SelectionObject.options[i].selected == true) {
			return true;
		}
	}
	return false;
} // end func

function FormCheck() {
	if (CheckSelectionBox("reg_period") == 0) {
		return false;
	}
	if (CheckSelectionBox("reg_period") == false) {
		alert("Please Select a Registration / Transfer Period.");
		domain_info.register_period.focus();
	}
	return false;
}

function CSB(SelObjId) {
	switch (typeof(SelObjId)) {
		case "object":
			var SelectionObject  = SelObjId;
			break;
		case "string":
			var SelectionObject  = document.getElementById(SelObjId);
			break;
	}
	for (var i=0; i<SelectionObject.options.length; i++) {
		if (SelectionObject.options[i].selected == true) {
			return true;
		}
	}
	return false;
} // end func

function CRB(SelObjId) {
	switch (typeof(SelObjId)) {
		case "object":
			var SelectionObject  = SelObjId;
			break;
		case "string":
			var SelectionObject  = document.getElementById(SelObjId);
			break;
	}
	for (var i=0; i<SelectionObject.length; i++) {
		if (SelectionObject[i].checked == true) {
			return true;
		}
	}
	return false;
}

function FormCheck2(frmObj) {
	if (typeof(frmObj.reg_period) == "undefined") {
		isAvailable();
//		alert("exit 2");
	} else if (typeof(frmObj.domainstatus.length) == "undefined" && frmObj.domainstatus.type == "checkbox" && frmObj.domainstatus.checked == false) {
		alert("域名資料不完整！");
//		alert("exit 3");
	} else if (typeof(frmObj.domainstatus.length) == "number" && CRB(frmObj.domainstatus) == false) {
		alert("域名資料不完整！");
//		alert("exit 4");
	} else if (CSB(frmObj.svc_type) == false) {
		alert("請選擇欲申請之服務！");
//		alert("Exit 5");
	} else if (CSB(frmObj.pkg_code) == false) {
		alert("請選擇欲申請之計劃！");
//		alert("exit 6");
	} else if (CSB(frmObj.payment_terms) == false) {
		alert("請選擇付款方式！");
//		alert("exit 7");
	} else if (frmObj.first_name.value == "") {
		alert("請輸入名字！");
		frmObj.first_name.focus();
//		alert("exit 9");
	} else if (frmObj.last_name.value == "") {
		alert("請輸入姓氏！");
		frmObj.last_name.focus();
//		alert("exit 10");
	} else if (frmObj.address1.value == "") {
		alert("請輸入通訊地址！");
		frmObj.address1.focus();
//		alert("exit 11");
	} else if (frmObj.phone.value == "") {
		alert("請輸入聯絡電話！");
		frmObj.phone.focus();
//		alert("exit 12");
	} else if (frmObj.email.value == "") {
		alert("請輸入電郵地址！");
		frmObj.email.focus();
//		alert("exit 13");
	} else if (!frmObj.email.value.match("^[0-9a-zA-Z][0-9a-zA-Z\._-]*[0-9a-zA-Z]*@[0-9a-zA-Z][0-9a-zA-Z\.-]+[0-9a-zA-Z]$")) {
		alert("閣下輸入的電郵地址不正確，請從新輸入！");
		frmObj.email.focus();
//		alert("exit 14");
	} else {
		return true;
	}
//	alert("exit 15");
	return false;
} // end func

function ObjectDisabled(Obj, status) {
	if (typeof(Obj) != "undefined") {
		switch (typeof(Obj)) {
			case "object":
				var SelectionObject  = Obj;
				break;
			case "string":
				var SelectionObject  = document.getElementById(Obj);
				break;
		}
		SelectionObject.disabled = status;
	}
} // end func

function getWhois() {
	var domain = document.getElementById('whois_domainname');
	var extension = document.getElementById('whois_extension');
	URL = "./whois.php" + "?output=whois&query=" + domain.value + extension.options[extension.selectedIndex].value;
	window.open(URL, "WHOIS", "width=800,height=600");
}
