//////////////////////////////////////////////////////////////////////////////////////////
//	Copyright (c) 2010 MSKYNET, Inc														//
//	All rights reserved																	//
//////////////////////////////////////////////////////////////////////////////////////////
function createAjaxRequest()
{
	var xmlHttp;

	try {  // Firefox, Opera 8.0+, Safari  
  		xmlHttp=new XMLHttpRequest();  
	}
	catch (e) {  // Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    	}
		catch (e) {
			try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
	    	}
    		catch (e) {
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	return xmlHttp;	
}

var ajaxCallId = 0;

function ajaxPostRequest(url, formattedQueryString)
{
	ajaxCallId++;
	var localCallId = ajaxCallId;
	
	var xmlHttp = createAjaxRequest();
	
	xmlHttp.open("POST", url, false);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  	xmlHttp.setRequestHeader("Content-length", formattedQueryString.length);
	xmlHttp.send(formattedQueryString);
	
	var responseData;
	
	if( xmlHttp.readyState == 4 ) {
		
		if( xmlHttp.status == 200 && ajaxCallId == localCallId) {
			var response;
			response.status = xmlHttp.status;
		}
	}
}

function appendData(queryString, data) {
	
	if(data) {
		queryString += "&data="+urlencode(data);
	}
	
	return queryString;
}

function appendQueryType(queryString, qt) {
	return queryString += "&qt="+qt;
}

function appendPhoneNumber(queryString, ph) {
	return queryString += "&tel="+urlencode(ph);
}

function appendMobile(queryString, ph) {
	return queryString += "&mobile="+urlencode(ph);
}

function appendNoCap(queryString, nocap) {
	return queryString += "&nocap="+nocap;
}

function appendSubheading(queryString, subheading) {
	return queryString += "&subcap="+urlencode(subheading);
}

function appendHeading(queryString, heading) {
	return queryString += "&cap="+urlencode(heading);
}

function appendMapCaption(queryString, mapcaption) {
	return queryString += "&mapcap="+urlencode(mapcaption);
}

function appendEcc(queryString, ecc) {
	return queryString += "&ecc="+ecc;
}

function appendVer(queryString, ver) {
	return queryString += "&ver="+ver;
}

function appendWidth(queryString, width) {
	return queryString += "&width="+width;
}

function appendTiny(queryString, isTiny)
{
	return queryString += "&tiny="+isTiny;
}

function appendColor(queryString, color) {
	return queryString += "&col="+color;
}

function appendFirstName(queryString, fName) {
	return queryString += "&fName="+urlencode(fName);
}

function appendLastName(queryString, lName) {
	return queryString += "&lName="+urlencode(lName);
}

function appendTitle(queryString, title) {
	return queryString += "&title="+urlencode(title);
}

function appendFaxNumber(queryString, faxNumber) {
	return queryString += "&fax="+urlencode(faxNumber);
}

function appendAddress(queryString, address) {
	return queryString += "&address="+urlencode(address);
}

function appendCity(queryString, city) {
	return queryString += "&city="+urlencode(city);
}

function appendState(queryString, state) {
	return queryString += "&state="+urlencode(state);
}

function appendZip(queryString, zip) {
	return queryString += "&zip="+urlencode(zip);
}

function appendCountry(queryString, country) {
	return queryString += "&country="+urlencode(country);
}

function appendCompany(queryString, company) {
	return queryString += "&company="+urlencode(company);
}

function appendEmail(queryString, email) {
	return queryString += "&email="+urlencode(email);
}

function appendUrl(queryString, url) {
	return queryString += "&url="+urlencode(url);
}

function appendTrack(queryString, redirect) {
	return queryString += "&track="+redirect;
}

function appendCampaign(queryString, redirect) {
	return queryString += "&campaignID="+redirect;
}

function appendBBName(queryString, bbName) {
	return queryString += "&fName="+urlencode(bbName);
}

function appendLocation(queryString, location) {
	return queryString += "&loc="+urlencode(location);
}

function appendDescription(queryString, description) {
	return queryString += "&desc="+urlencode(description);
}

function appendAlarm(queryString, alarm) {
	return queryString += "&alarm="+alarm;
}

function appendMailbot(queryString, mailbot) {
	return queryString += "&mailbot="+mailbot;
}

function appendStartYear(queryString, time) {
	return queryString += "&sYear="+time;
}

function appendStartMonth(queryString, time) {
	return queryString += "&sMonth="+time;
}

function appendStartDay(queryString, time) {
	return queryString += "&sDay="+time;
}

function appendStartHour(queryString, time) {
	return queryString += "&sHour="+time;
}

function appendStartMinute(queryString, time) {
	return queryString += "&sMin="+time;
}

function appendStartOffset(queryString, time) {
	return queryString += "&sOffset="+time;
}


function appendEndYear(queryString, time) {
	return queryString += "&eYear="+time;
}

function appendEndMonth(queryString, time) {
	return queryString += "&eMonth="+time;
}

function appendEndDay(queryString, time) {
	return queryString += "&eDay="+time;
}

function appendEndHour(queryString, time) {
	return queryString += "&eHour="+time;
}

function appendEndMinute(queryString, time) {
	return queryString += "&eMin="+time;
}

function appendEndOffset(queryString, time) {
	return queryString += "&eOffset="+time;
}

function updateCommonOptions(options) {
	var subheading = $('subheading')
	
	if (subheading) {
		options['subheading'] = subheading.value;
	}
	
	var heading = $('heading');
	if(heading) {
		options['heading'] = heading.value;
	}
	
	
	var hideSubcap = $('hide-subcap');
	if(hideSubcap && hideSubcap.checked) {
		options['noCap'] = 1;
	}
	
	var showMailbot = $('display-mailbot');
	if(showMailbot && showMailbot.checked) {
		options['mailbot'] = 1;
	}
	
	var qrEcc = $('qrcode-ecc');
	if(qrEcc && qrEcc.value && qrEcc.value != 'Auto') {
		options['ecc'] = qrEcc.value;
	}
	
	var qrColor = $('color-picker');
	if(qrColor && qrColor.value) {
		options['color'] = qrColor.value;
	}
	
	var qrVer = $('qrcode-ver');
	if(qrVer && qrVer.value && qrVer.value != 'Auto') {
		options['ver'] = qrVer.value;
	}
	
	var qrCodeWidth = $('qrcode-width');
		
	if(qrCodeWidth && qrCodeWidth.value && qrCodeWidth.value != "Pixels") {
		options['width'] = qrCodeWidth.value;
	}
	else {
		options['width'] = null;
	}
}

function generateQueryString(options) {
	var queryString = "";
	
	for( var current in options ) {
		var curFunc = propertyFunctionMap[current];
		
		if (curFunc) {
			if (options[current]) {
				queryString = curFunc(queryString, options[current]);
			}
		}
		else {
			alert("Could not find parsing function for: "+current);
		}
	}
	
	queryString = queryString.replace(/^&/, "");
	return queryString;
}

var propertyFunctionMap = new Object();
propertyFunctionMap['qt'] = appendQueryType;
propertyFunctionMap['phoneNumber'] = appendPhoneNumber;
propertyFunctionMap['mobile'] = appendMobile;
propertyFunctionMap['data'] = appendData;
propertyFunctionMap['noCap'] = appendNoCap;
propertyFunctionMap['subheading'] = appendSubheading;
propertyFunctionMap['heading'] = appendHeading;
propertyFunctionMap['ecc'] = appendEcc;
propertyFunctionMap['ver'] = appendVer;
propertyFunctionMap['width'] = appendWidth;
propertyFunctionMap['tiny'] = appendTiny;
propertyFunctionMap['color'] = appendColor;
propertyFunctionMap['fName'] = appendFirstName;
propertyFunctionMap['lName'] = appendLastName;
propertyFunctionMap['title'] = appendTitle;
propertyFunctionMap['faxNumber'] = appendFaxNumber;
propertyFunctionMap['address'] = appendAddress;
propertyFunctionMap['city'] = appendCity;
propertyFunctionMap['state'] = appendState;
propertyFunctionMap['zip'] = appendZip;
propertyFunctionMap['country'] = appendCountry;
propertyFunctionMap['company'] = appendCompany;
propertyFunctionMap['email'] = appendEmail;
propertyFunctionMap['url'] = appendUrl;
propertyFunctionMap['track'] = appendTrack;
propertyFunctionMap['campaignID'] = appendCampaign;
propertyFunctionMap['mapcap'] = appendMapCaption;
propertyFunctionMap['bbName'] = appendBBName;
propertyFunctionMap['loc'] = appendLocation;
propertyFunctionMap['desc'] = appendDescription;
propertyFunctionMap['alarm'] = appendAlarm;
propertyFunctionMap['mailbot'] = appendMailbot;

propertyFunctionMap['sYear'] = appendStartYear;
propertyFunctionMap['sMonth'] = appendStartMonth;
propertyFunctionMap['sDay'] = appendStartDay;
propertyFunctionMap['sHour'] = appendStartHour;
propertyFunctionMap['sMin'] = appendStartMinute;
propertyFunctionMap['sOffset'] = appendStartOffset;

propertyFunctionMap['eYear'] = appendEndYear;
propertyFunctionMap['eMonth'] = appendEndMonth;
propertyFunctionMap['eDay'] = appendEndDay;
propertyFunctionMap['eHour'] = appendEndHour;
propertyFunctionMap['eMin'] = appendEndMinute;
propertyFunctionMap['eOffset'] = appendEndOffset;