// REQUIRES
// =============================
// g_iPhoneApps
// g_androidApps
// g_bitlyLink
// g_appBaseURL
// json2.js
// zeroclipboard.js

var CURRENCY_NAME_SINGULAR = 'Bones';
var CURRENCY_NAME_PLURAL = 'Bones';

var IPHONE_DEVICE_TYPE = 'iPhone';
var ANDROID_DEVICE_TYPE = 'Android';

var NUM_APPS_IN_FEATURED_APP_ROW = 5;

var NUM_APPS_IN_SEE_ALL_ROW = 6;
var NUM_ROWS_IN_SEE_ALL_VIEW = 2;

var g_deviceTypeForFeaturedApps = 'iPhone';
var g_deviceTypeForSeeAllApps = 'iPhone';

var g_indexOfFirstFeaturedApp = 0;

var g_indexOfFirstSeeAllApp = 0;

function getStartIndexForFinalPage(numUnits, numUnitsPerPage) {
	if (numUnits < 1 || numUnitsPerPage < 1) {
		return 0;
	}
	
	var mod = numUnits % numUnitsPerPage;
	var index1 = numUnits - mod;
	
	if (index1 == numUnits) {
		return numUnits - numUnitsPerPage;
	}
	else {
		return index1;
	}
}

function getSingleAppHTML(index, deviceType) {
	if (deviceType == null || (deviceType != IPHONE_DEVICE_TYPE && deviceType != ANDROID_DEVICE_TYPE)) {
		deviceType = IPHONE_DEVICE_TYPE;
	}
	
	var html = "<div style=\"padding: 5px; font-size:9px; white-space:nowrap; text-overflow: ellipsis; -o-text-overflow: ellipsis; -ms-text-overflow: ellipsis; overflow: hidden; display:block; width: 71px; height: 107px; float: left;\">";
	var fbCreditsString = CURRENCY_NAME_SINGULAR;

	if (deviceType == ANDROID_DEVICE_TYPE) {
		if (index < g_androidApps.OfferArray.length) {
			html += '<img src="' + g_androidApps.OfferArray[index].IconURL + '"></img><br/>';
			html += g_androidApps.OfferArray[index].Name + '<br/>';
			
			if (g_androidApps.OfferArray[index].Amount > 1) {
				var fbCreditsString = CURRENCY_NAME_PLURAL;
			}
			
			html += '<span>' + g_androidApps.OfferArray[index].Amount + ' ' + fbCreditsString + ' ' + '</span><br/>';
			html += g_androidApps.OfferArray[index].Cost;
		}
	}
	else {
		if (index < g_iPhoneApps.OfferArray.length) {
			html += '<img src="' + g_iPhoneApps.OfferArray[index].IconURL + '"></img><br/>';
			html += g_iPhoneApps.OfferArray[index].Name + '<br/>';
			
			if (g_iPhoneApps.OfferArray[index].Amount > 1) {
				var fbCreditsString = CURRENCY_NAME_PLURAL;
			}
			
			html += '<span>' + g_iPhoneApps.OfferArray[index].Amount + ' ' + fbCreditsString + ' ' + '</span><br/>';
			html += g_iPhoneApps.OfferArray[index].Cost;
		}
	}
	
	html += '</div>';
	
	return html;
}

// Featured Apps
function getFeaturedAppListHTML(startIndex) {
	var html = '';
	for (var i=startIndex; i < (startIndex + NUM_APPS_IN_FEATURED_APP_ROW); i++) {
		html += getSingleAppHTML(i, g_deviceTypeForFeaturedApps);
	}
	
	return html;
}

function reDrawFeaturedAppList() {
	$('featured_apps').innerHTML = getFeaturedAppListHTML(g_indexOfFirstFeaturedApp);
}

function onClickFeaturedAppLeft() {
	g_indexOfFirstFeaturedApp = Math.max(g_indexOfFirstFeaturedApp - NUM_APPS_IN_FEATURED_APP_ROW, 0);
	reDrawFeaturedAppList();
}

function onClickFeaturedAppRight() {
	if (g_deviceTypeForFeaturedApps == ANDROID_DEVICE_TYPE) {			
		g_indexOfFirstFeaturedApp = Math.min(g_indexOfFirstFeaturedApp + NUM_APPS_IN_FEATURED_APP_ROW, getStartIndexForFinalPage(g_androidApps.OfferArray.length, NUM_APPS_IN_FEATURED_APP_ROW));
	}
	else {
		g_indexOfFirstFeaturedApp = Math.min(g_indexOfFirstFeaturedApp + NUM_APPS_IN_FEATURED_APP_ROW, getStartIndexForFinalPage(g_iPhoneApps.OfferArray.length, NUM_APPS_IN_FEATURED_APP_ROW));
	}
	
	reDrawFeaturedAppList();
}

function setFeaturedAppsSelected(deviceTypeSelected) {
	if (deviceTypeSelected == null || (deviceTypeSelected != IPHONE_DEVICE_TYPE && deviceTypeSelected != ANDROID_DEVICE_TYPE)) {
		deviceTypeSelected = IPHONE_DEVICE_TYPE;
	}
	
	if (deviceTypeSelected == ANDROID_DEVICE_TYPE) {
		$('featured_android_tab').setAttribute("class", "android_selected");
		$('featured_iphone_tab').setAttribute("class", "iphone");
	}
	else {
		$('featured_android_tab').setAttribute("class", "android");
		$('featured_iphone_tab').setAttribute("class", "iphone_selected");
	}
}

function onClickFeaturedAppDeviceTypeIPhone() {
	g_deviceTypeForFeaturedApps = IPHONE_DEVICE_TYPE;
	g_indexOfFirstFeaturedApp = 0;
	setFeaturedAppsSelected(IPHONE_DEVICE_TYPE);
	reDrawFeaturedAppList();
}

function onClickFeaturedAppDeviceTypeAndroid() {
	g_deviceTypeForFeaturedApps = ANDROID_DEVICE_TYPE;
	g_indexOfFirstFeaturedApp = 0;
	setFeaturedAppsSelected(ANDROID_DEVICE_TYPE);
	reDrawFeaturedAppList();
}

function onClickSeeAllFeaturedApps() {
	g_indexOfFirstSeeAllApp = 0;
	g_deviceTypeForSeeAllApps = g_deviceTypeForFeaturedApps;
	$('all_apps_container').style.display = 'block';
	reDrawSeeAllAppList(g_deviceTypeForSeeAllApps);
}

// See All Apps
function setSeeAllAppsSelectedTab(deviceTypeSelected) {
	if (deviceTypeSelected == null || (deviceTypeSelected != IPHONE_DEVICE_TYPE && deviceTypeSelected != ANDROID_DEVICE_TYPE)) {
		deviceTypeSelected = IPHONE_DEVICE_TYPE;
	}
	
	if (deviceTypeSelected == ANDROID_DEVICE_TYPE) {
		$('see_all_android_tab').setAttribute("class", "android_selected");
		$('see_all_iphone_tab').setAttribute("class", "iphone");
	}
	else {
		$('see_all_android_tab').setAttribute("class", "android");
		$('see_all_iphone_tab').setAttribute("class", "iphone_selected");
	}
}

function reDrawSeeAllAppList(deviceType) {
	if (deviceType == null || (deviceType != IPHONE_DEVICE_TYPE && deviceType != ANDROID_DEVICE_TYPE)) {
		deviceType = IPHONE_DEVICE_TYPE;
	}
	
	$('all_apps_list').innerHTML = getSeeAllAppListHTML(g_indexOfFirstSeeAllApp, deviceType);
	
	if (deviceType == IPHONE_DEVICE_TYPE) {
		$('apple_or_android').innerHTML = 'Apple Devices';				
		setSeeAllAppsSelectedTab(IPHONE_DEVICE_TYPE);
	}
	else {
		$('apple_or_android').innerHTML = 'Android Devices';	
		setSeeAllAppsSelectedTab(ANDROID_DEVICE_TYPE);
	}
}
		
function getSeeAllAppListHTML(startIndex, deviceType) {
	if (deviceType == null || (deviceType != IPHONE_DEVICE_TYPE && deviceType != ANDROID_DEVICE_TYPE)) {
		deviceType = IPHONE_DEVICE_TYPE;
	}
	
	var html = '';
	for (var i=0; i < NUM_ROWS_IN_SEE_ALL_VIEW; i++) {
		html += '<div style="clear: both;"></div><div>';
		for (var j=0; j < NUM_APPS_IN_SEE_ALL_ROW; j++) {
			html += getSingleAppHTML(startIndex + (i * NUM_APPS_IN_SEE_ALL_ROW + j), deviceType);
		}
		html += '</div>';
	}

	return html;
}

function onClickSeeAllPrev() {
	var appsPerPage = NUM_ROWS_IN_SEE_ALL_VIEW * NUM_APPS_IN_SEE_ALL_ROW;
	g_indexOfFirstSeeAllApp = Math.max(g_indexOfFirstSeeAllApp - appsPerPage, 0);
	reDrawSeeAllAppList(g_deviceTypeForSeeAllApps);
}

function onClickSeeAllNext() {
	var appsPerPage = NUM_ROWS_IN_SEE_ALL_VIEW * NUM_APPS_IN_SEE_ALL_ROW;
	if (g_deviceTypeForSeeAllApps == ANDROID_DEVICE_TYPE) {
		g_indexOfFirstSeeAllApp = Math.min(g_indexOfFirstSeeAllApp + appsPerPage, getStartIndexForFinalPage(g_androidApps.OfferArray.length, appsPerPage));
	}
	else {
		g_indexOfFirstSeeAllApp = Math.min(g_indexOfFirstSeeAllApp + appsPerPage, getStartIndexForFinalPage(g_iPhoneApps.OfferArray.length, appsPerPage));
	}
	
	reDrawSeeAllAppList(g_deviceTypeForSeeAllApps);
}

function onClickSeeAllIPhone() {
	g_deviceTypeForSeeAllApps = IPHONE_DEVICE_TYPE;
	g_indexOfFirstSeeAllApp = 0;
	reDrawSeeAllAppList(g_deviceTypeForSeeAllApps);
}

function onClickSeeAllAndroid() {
	g_deviceTypeForSeeAllApps = ANDROID_DEVICE_TYPE;
	g_indexOfFirstSeeAllApp = 0;
	reDrawSeeAllAppList(g_deviceTypeForSeeAllApps);	
}

function onClickCloseSeeAll() {
	$('all_apps_list').innerHTML = '';
	$('all_apps_container').style.display = 'none';
}

// Get Started - Email or SMS
function onClickGetStarted() {
	$('send_link_container').style.display = 'block';
	Recaptcha.destroy();
	Recaptcha.create("6LdBA7oSAAAAAPQZrwm-Hpa8awytYcJYrhnEG7L5", "recaptcha", {} );
	redrawPhonePrefix();
	$('email').focus();

	initZeroClipboard();	
}

function getCopyLinkHTML(left, top) {
	return '<div id="d_clip_container" style="left: ' + left + '; top: ' + top + '; position: relative;"><div id="d_clip_button">Copy link</div></div>';
}

function reWritePlaceholderText(element, eventName) {
	var elementValue = element.value.strip();
	if (element.id == 'email') {
		if (eventName == 'focus') {
			if (elementValue == '<Email>') {
				element.value = '';
				element.style.color = '';
			}
		}
		else if (eventName == 'blur') {
			if (elementValue == '') {
				element.value = '<Email>';
				element.style.color = 'grey';
			}
		}
	}
	else if (element.id == 'phone') {
		if (eventName == 'focus') {
			if (elementValue == '<Phone Number>') {
				element.value = '';
				element.style.color = '';
			}
		}
		else if (eventName == 'blur') {
			if (elementValue == '') {
				element.value = '<Phone Number>';
				element.style.color = 'grey';
			}
		}
	}
}

function onClickCloseGetStarted() {
	$('send_link_container').style.display = 'none';
}

function doAjaxSubmitForSendLink() {
	var form = document.forms['send_to_mobile'];
	var deliveryMethodRadioGroup = form.elements['delivery_method'];
	var deliveryMethodValue = 'email';
	
	for (i=0; i < deliveryMethodRadioGroup.length; i++) {
		if (deliveryMethodRadioGroup[i].checked == true) {
			deliveryMethodValue = deliveryMethodRadioGroup[i].value;
			break;
		}
	}
	
	var email = $('email').value.strip();
	$('email').value = email;
	
	var phone = $('phone').value.strip();
	$('phone').value = phone;
	
	var country = $('countries').value;
							
	if (deliveryMethodValue == 'email') {
		if (!dojox.validate.isEmailAddress(email)) {
			alert('Enter a valid email address.');
			return;
		}
		phone = '';
		country = '';
	}
	else if (deliveryMethodValue == 'sms') {
		if (!isAcceptablePhoneNumber(phone)) {
			alert('Enter a valid phone number.');
			return;
		}
		email = '';
	}
	else {
		isError = true;
		alert('Unknown error.');
		return;
	}
	
	var recaptchaChallengeField = form.elements['recaptcha_challenge_field'].value;
	var recaptchaResponseField = form.elements['recaptcha_response_field'].value;
	var remoteAddress = form.elements['remote_address'].value;
	var link = form.elements['link'].value;
	
	if (recaptchaResponseField.strip() == '') {
		alert('Enter valid words in reCAPTCHA box.');
		form.elements['recaptcha_response_field'].focus();
		return;
	}
	
	var parameters = 'email=' + encodeURIComponent(email) + '&phone=' + encodeURIComponent(phone) + '&country=' + encodeURIComponent(country) + '&recaptcha_challenge_field=' + encodeURIComponent(recaptchaChallengeField) + '&recaptcha_response_field=' + encodeURIComponent(recaptchaResponseField) + '&remote_address=' + encodeURIComponent(remoteAddress) + '&link=' + encodeURIComponent(link);
	new Ajax.Request(g_appBaseURL + 'webapp/pc/send_link', {
		method: 'post',
		parameters: parameters,
		onSuccess: function(xhrResponse) {
			var responseText = xhrResponse.responseText;
			responseText = responseText.strip();
			var jsonResponse = JSON.parse(responseText);
			var statusCode = jsonResponse.status_code;
			var message = jsonResponse.message;
			
			if (statusCode < 300) {
				var successHTML = '';			
				successHTML += '<h1>Success!</h1>';
				successHTML += '<p><strong>Your AppDog mobile link has been sent successfully.</strong></p>';
				successHTML += '<ul>';
				successHTML += '<li>Check your SMS or email account from your mobile device</li>';
				successHTML += '<li>Click the link</li>';
				successHTML += '<li>Register for AppDog</li>';
				successHTML += '<li>Start downloading apps and earning Facebook Credits</li>';
				successHTML += '</ul>';
				successHTML += '<p>If, for some reason, you do not receive the link, just enter it into your mobile browser: <span style="font-weight: bold; color: #f78f1e;">' + g_bitlyLink + '</span>.</p>';
				successHTML += getCopyLinkHTML('270px', '-30px');

				removeElement('send_to_mobile');
				removeElement('send_link_instructions');
				$('send_link_response_message').innerHTML = successHTML;
				
				initZeroClipboard();
			}
			else {
				var errorHTML = '';
				errorHTML += '<h1 class="error">Error</h1>';
				errorHTML += '<p><strong>AppDog was unable to send the mobile link to your device.</strong></p>';
				errorHTML += '<p>Please try again or type the link directly into your mobile browser: <span style="font-weight: bold; color: #f78f1e;">' + g_bitlyLink + '</span>.</p>';
				errorHTML += getCopyLinkHTML('157px', '-30px');

				removeElement('send_link_instructions');
				$('send_link_response_message').innerHTML = errorHTML;
				Recaptcha.destroy();
				Recaptcha.create("6LdBA7oSAAAAAPQZrwm-Hpa8awytYcJYrhnEG7L5", "recaptcha", {} );
				
				initZeroClipboard();
			}
			
			//$('send_link_container').style.display = 'none';
		},
		onFailure: function(xhrResponse) {
			alert('ERROR');
		}
	});						
}

function initZeroClipboard() {
	var clip = new ZeroClipboard.Client();
	clip.setText(g_bitlyLink);
	clip.setHandCursor(true);
	clip.setCSSEffects(true);		
    clip.glue('d_clip_button', 'd_clip_container');		
}

function redrawPhonePrefix() {
	var countryCode = $('countries').value
	var callingCodeObject = callingCodes[countryCode];
	var phonePrefix = '';
	if (typeof callingCodeObject != 'undefined') {
		phonePrefix = callingCodes[countryCode].code;
	}
	if (phonePrefix != '') {
		phonePrefix = '+' + phonePrefix + ' ';
	}
	
	$('phone_prefix').innerHTML = phonePrefix;
}

function isAcceptablePhoneNumber(phoneNumber) {
    if (phoneNumber == null || phoneNumber.length == 0) {
        return false;
    }
    
    var length = phoneNumber.length;
    if (length < 3 || length > 18) {
        return false;
    }
    
    var acceptableCharacters = "0123456789 ()-+.";
    for (var i = 0; i < length; i++) {
        var ch = phoneNumber.charAt(i);
        if (acceptableCharacters.indexOf(ch) < 0) {
            return false;
        }
    }
    
    return true;
}

function removeElement(id) {	
	var element = $(id);
	if (element == null) {
		return;
	}
	else {
		element.parentNode.removeChild(element);
	}
}
