// Start Credit card Code Validation

var ccErrorNo = 0;
var ccErrors = new Array ()

ccErrors [0] = "Unknown card type";
ccErrors [1] = "No card number provided";
ccErrors [2] = "Credit card number is in invalid format";
ccErrors [3] = "Credit card number is invalid";
ccErrors [4] = "Credit card number has an inappropriate number of digits";

function checkCreditCard (cardnumber, cardname) {
     
  // Array to hold the permitted card characteristics
  var cards = new Array();

  // Define the cards we support. You may add addtional card types as follows.
  
  //  Name:         As in the selection box of the form - must be same as user's
  //  Length:       List of possible valid lengths of the card number for the card
  //  prefixes:     List of possible prefixes for the card
  //  checkdigit:   Boolean to say whether there is a check digit
  
  cards [0] = {name: "Visa", 
               length: "13,16", 
               prefixes: "4",
               checkdigit: true};
  cards [1] = {name: "MasterCard", 
               length: "16", 
               prefixes: "51,52,53,54,55",
               checkdigit: true};
  cards [2] = {name: "DinersClub", 
               length: "14,16", 
               prefixes: "305,36,38,54,55",
               checkdigit: true};
  cards [3] = {name: "CarteBlanche", 
               length: "14", 
               prefixes: "300,301,302,303,304,305",
               checkdigit: true};
  cards [4] = {name: "AmEx", 
               length: "15", 
               prefixes: "34,37",
               checkdigit: true};
  cards [5] = {name: "Discover", 
               length: "16", 
               prefixes: "6011,622,64,65",
               checkdigit: true};
  cards [6] = {name: "JCB", 
               length: "16", 
               prefixes: "35",
               checkdigit: true};
  cards [7] = {name: "enRoute", 
               length: "15", 
               prefixes: "2014,2149",
               checkdigit: true};
  cards [8] = {name: "Solo", 
               length: "16,18,19", 
               prefixes: "6334,6767",
               checkdigit: true};
  cards [9] = {name: "Switch", 
               length: "16,18,19", 
               prefixes: "4903,4905,4911,4936,564182,633110,6333,6759",
               checkdigit: true};
  cards [10] = {name: "Maestro", 
               length: "12,13,14,15,16,18,19", 
               prefixes: "5018,5020,5038,6304,6759,6761",
               checkdigit: true};
  cards [11] = {name: "VisaElectron", 
               length: "16", 
               prefixes: "417500,4917,4913,4508,4844",
               checkdigit: true};
  cards [12] = {name: "LaserCard", 
               length: "16,17,18,19", 
               prefixes: "6304,6706,6771,6709",
               checkdigit: true};
               
  // Establish card type
  var cardType = -1;
  for (var i=0; i<cards.length; i++) {

    // See if it is this card (ignoring the case of the string)
    if (cardname.toLowerCase () == cards[i].name.toLowerCase()) {
      cardType = i;
      break;
    }
  }
  
  // If card type not found, report an error
  if (cardType == -1) {
     ccErrorNo = 0;
     return false; 
  }
   
  // Ensure that the user has provided a credit card number
  if (cardnumber.length == 0)  {
     ccErrorNo = 1;
     return false; 
  }
    
  // Now remove any spaces from the credit card number
  cardnumber = cardnumber.replace (/\s/g, "");
  
  // Check that the number is numeric
  var cardNo = cardnumber
  var cardexp = /^[0-9]{13,19}$/;
  if (!cardexp.exec(cardNo))  {
     ccErrorNo = 2;
     return false; 
  }
       
  // Now check the modulus 10 check digit - if required
  if (cards[cardType].checkdigit) {
    var checksum = 0;                                  // running checksum total
    var mychar = "";                                   // next char to process
    var j = 1;                                         // takes value of 1 or 2
  
    // Process each digit one by one starting at the right
    var calc;
    for (i = cardNo.length - 1; i >= 0; i--) {
    
      // Extract the next digit and multiply by 1 or 2 on alternative digits.
      calc = Number(cardNo.charAt(i)) * j;
    
      // If the result is in two digits add 1 to the checksum total
      if (calc > 9) {
        checksum = checksum + 1;
        calc = calc - 10;
      }
    
      // Add the units element to the checksum total
      checksum = checksum + calc;
    
      // Switch the value of j
      if (j ==1) {j = 2} else {j = 1};
    } 
  
    // All done - if checksum is divisible by 10, it is a valid modulus 10.
    // If not, report an error.
    if (checksum % 10 != 0)  {
     ccErrorNo = 3;
     return false; 
    }
  }  

  // The following are the card-specific checks we undertake.
  var LengthValid = false;
  var PrefixValid = false; 
  var undefined; 

  // We use these for holding the valid lengths and prefixes of a card type
  var prefix = new Array ();
  var lengths = new Array ();
    
  // Load an array with the valid prefixes for this card
  prefix = cards[cardType].prefixes.split(",");
      
  // Now see if any of them match what we have in the card number
  for (i=0; i<prefix.length; i++) {
    var exp = new RegExp ("^" + prefix[i]);
    if (exp.test (cardNo)) PrefixValid = true;
  }
      
  // If it isn't a valid prefix there's no point at looking at the length
  if (!PrefixValid) {
     ccErrorNo = 3;
     return false; 
  }
    
  // See if the length is valid for this card
  lengths = cards[cardType].length.split(",");
  for (j=0; j<lengths.length; j++) {
    if (cardNo.length == lengths[j]) LengthValid = true;
  }
  
  // See if all is OK by seeing if the length was valid. We only check the length if all else was 
  // hunky dory.
  if (!LengthValid) {
     ccErrorNo = 4;
     return false; 
  };   
  
  // The credit card is in the required format.
  return true;
}



// End of credit card code validation

//==============================================================

 var END_OF_INPUT = -1;
 
var base64Chars = new Array(
    'A','B','C','D','E','F','G','H',
    'I','J','K','L','M','N','O','P',
    'Q','R','S','T','U','V','W','X',
    'Y','Z','a','b','c','d','e','f',
    'g','h','i','j','k','l','m','n',
    'o','p','q','r','s','t','u','v',
    'w','x','y','z','0','1','2','3',
    '4','5','6','7','8','9','+','/'
);
 
var reverseBase64Chars = new Array();
for (var i=0; i < base64Chars.length; i++){
    reverseBase64Chars[base64Chars[i]] = i;
}
 
var base64Str;
var base64Count;
function setBase64Str(str){
    base64Str = str;
    base64Count = 0;
}
function readBase64(){    
    if (!base64Str) return END_OF_INPUT;
    if (base64Count >= base64Str.length) return END_OF_INPUT;
    var c = base64Str.charCodeAt(base64Count) & 0xff;
    base64Count++;
    return c;
}
function encodeBase64(str){
    setBase64Str(str);
    var result = '';
    var inBuffer = new Array(3);
    var lineCount = 0;
    var done = false;
    while (!done && (inBuffer[0] = readBase64()) != END_OF_INPUT){
        inBuffer[1] = readBase64();
        inBuffer[2] = readBase64();
        result += (base64Chars[ inBuffer[0] >> 2 ]);
        if (inBuffer[1] != END_OF_INPUT){
            result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30) | (inBuffer[1] >> 4) ]);
            if (inBuffer[2] != END_OF_INPUT){
                result += (base64Chars [((inBuffer[1] << 2) & 0x3c) | (inBuffer[2] >> 6) ]);
                result += (base64Chars [inBuffer[2] & 0x3F]);
            } else {
                result += (base64Chars [((inBuffer[1] << 2) & 0x3c)]);
                result += ('=');
                done = true;
            }
        } else {
            result += (base64Chars [(( inBuffer[0] << 4 ) & 0x30)]);
            result += ('=');
            result += ('=');
            done = true;
        }
        lineCount += 4;
        if (lineCount >= 76){
            result += ('\n');
            lineCount = 0;
        }
    }
    return result;
}
function readReverseBase64(){   
    if (!base64Str) return END_OF_INPUT;
    while (true){      
        if (base64Count >= base64Str.length) return END_OF_INPUT;
        var nextCharacter = base64Str.charAt(base64Count);
        base64Count++;
        if (reverseBase64Chars[nextCharacter]){
            return reverseBase64Chars[nextCharacter];
        }
        if (nextCharacter == 'A') return 0;
    }
    return END_OF_INPUT;
}
 
function ntos(n){
    n=n.toString(16);
    if (n.length == 1) n="0"+n;
    n="%"+n;
    return unescape(n);
}
 
function decodeBase64(str){
    setBase64Str(str);
    var result = "";
    var inBuffer = new Array(4);
    var done = false;
    while (!done && (inBuffer[0] = readReverseBase64()) != END_OF_INPUT
        && (inBuffer[1] = readReverseBase64()) != END_OF_INPUT){
        inBuffer[2] = readReverseBase64();
        inBuffer[3] = readReverseBase64();
        result += ntos((((inBuffer[0] << 2) & 0xff)| inBuffer[1] >> 4));
        if (inBuffer[2] != END_OF_INPUT){
            result +=  ntos((((inBuffer[1] << 4) & 0xff)| inBuffer[2] >> 2));
            if (inBuffer[3] != END_OF_INPUT){
                result +=  ntos((((inBuffer[2] << 6)  & 0xff) | inBuffer[3]));
            } else {
                done = true;
            }
        } else {
            done = true;
        }
    }
    return result;
}
 

function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

function validation()
{    
    if(document.getElementById('fname').value == '')
	{
	 alert('You must fill first name');	
	 return false;
	}
	if(document.getElementById('lname').value == '')
	{
	 alert('You must fill last name');	
	 return false;
	}
	if(document.getElementById('email').value == '')
	{
	 alert('You must fill Email Address');	
	 return false;
	}
	if(document.getElementById('email').value != '')
	{
	 var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	 var address = document.getElementById('email').value;
	 if(reg.test(address) == false) {
 
      alert('Invalid Email Address');
      return false;
   }
	}
	if(document.getElementById('cemail').value == '')
	{
	 alert('You must fill Confirm e-mail Adress');	
	 return false;
	}
	if(document.getElementById('cemail').value != '')
	{
	 var email = document.getElementById('email').value;
	 var cmail = document.getElementById('cemail').value;
	 if(email != cmail)
	 {
	  alert('You must match Confirm e-mail Adress with Email Address');
	  return false;
	 }
	}
	
	if(document.getElementById('address').value == '')
	{
	 alert('You must fill address');	
	 return false;
	}
	
	if(document.getElementById('city').value == '')
	{
	 alert('You must fill City');	
	 return false;
	}
	if(document.getElementById('state').value == '')
	{
	 alert('You must fill State / Province');	
	 return false;
	}
	if(document.getElementById('zipcode').value == '')
	{ 
	 alert('You must fill ZIP / Postal Code');	
	 return false;
	}
	if(document.getElementById('country').value == 0)
	{
	 alert('You must select the country');	
	 return false;
	}
	if(document.getElementById('cardnumber').value == '' && document.getElementById('ccdiv').style.display=='block')
	{
	 alert('You must fill Card Number');	
	 return false;
	}
	if(document.getElementById('cardnumber').value != '' && document.getElementById('ccdiv').style.display=='block')
	{
	 var myCardNo = document.getElementById('cardnumber').value;
	 var myCardType = document.getElementById('creditCardType').value;
	 
  if (checkCreditCard (myCardNo,myCardType)) {
    
  } 
  else {alert (ccErrors[ccErrorNo]); return false;}
	
	}
	if(document.getElementById('creditCardType').value == '' && document.getElementById('ccdiv').style.display=='block')
	{
	 alert('You must fill Card type');	
	 return false;
	}
	if(document.getElementById('nameoncard').value == '' && document.getElementById('ccdiv').style.display=='block')
	{
	 alert('You must fill Name on card');	
	 return false;
	}
	if((document.getElementById('expDateMonth').value != '') && (document.getElementById('expDateYear').value != '') && document.getElementById('ccdiv').style.display=='block')
	{
		var d = new Date();
		var cmonth = d.getMonth();
		var cyear = d.getFullYear();
		cmonth = cmonth + 1; 
		var month = document.getElementById('expDateMonth').value;
		var year =  document.getElementById('expDateYear').value;
		
		
		if(year < cyear)
		{ 
		   
		alert('Credit card is expired');
		return false;
		  
		}
		else if(year == cyear)
		{
			if(month < cmonth)
			{
				alert('Credit card is expired');
		        return false;
			}
			
	    }
	}
	
	if(document.getElementById('cvv2Number').value == '' && document.getElementById('ccdiv').style.display=='block')
	{
	 alert('You must fill Security code');	
	 return false;
	}
	if(document.getElementById('plan').value == 'plan1')
	{
	 alert('You must select the plan|facebook fans');	
	 return false;
	}
	
	if(getCheckedValue(document.forms['trialform'].elements['chk_terms'])=='notagree' || getCheckedValue(document.forms['trialform'].elements['chk_terms'])=='')
	{
		alert('You must Agree to Social Bravo Terms of Service');
		return false;
	}
	else 
	{ 	
		document.getElementById('savebutton').innerHTML='<a  class="trial-signup-btn"><img src="images/loader.gif" alt="" width="35" height="35" /></a>';
		document.getElementById('trialform').submit();
	}
	
  
}
function unblock(){
 	document.getElementById('savebutton').innerHTML='<a href="javascript:;" onClick="validation(); return" class="trial-signup-btn"><img src="images/sign-up-btn.png" alt="" width="145" height="38" /></a>'; 
 	document.getElementById('trialformpage').style.display="none";
 	document.getElementById('choosepage').style.display="block";
	
	
	}
function unblocksignup(){
	document.getElementById('message').style.display="block";
	document.getElementById('message').innerHTML="You are signed up with SocialBravo Successfully ";
 	document.getElementById('savebutton').innerHTML='<a  href="javascript:;" onClick="validation(); return" class="trial-signup-btn"><img src="images/subscribeme-btn.png" alt="" width="145" height="38" /></a>'; 
	}
function errormessage(){
	document.getElementById('message').style.display="block";
	document.getElementById('message').innerHTML="There is some problem with signed up (Error Found)";
 	document.getElementById('savebutton').innerHTML='<a  href="javascript:;" onClick="validation(); return" class="trial-signup-btn"><img src="images/subscribeme-btn.png" alt="" width="145" height="38" /></a>'; 
	}

function showsteps(){
	document.getElementById('step2and3').style.display="block";
	ddl=document.getElementById('listpages');
	pageid=ddl.options[ddl.selectedIndex].value;
	document.getElementById('selectedpage').value=pageid;
	 
	}	
function showstep3(){
	ddl=document.getElementById('plan');
	plan=ddl.options[ddl.selectedIndex].value;
	if(plan=='0/Month(Fans:0-1000)')
	document.getElementById('ccdiv').style.display="none";
	else
	document.getElementById('ccdiv').style.display="block";
	 
	}	
function getSelectedValue(){
	ddl=document.getElementById('listpages');
	pageid=ddl.options[ddl.selectedIndex].value;
	return pageid;
	}	
function viewValue(val){
	
	alert(getSelectedValue()+"==="+encodeBase64(getSelectedValue()));
	}	
 function installApp(appid, appcanvas){
	 //alert(encodeBase64(getSelectedValue()));
	window.location="https://www.facebook.com/dialog/oauth?client_id="+appid+"&scope=manage_pages&redirect_uri="+appcanvas+"index.php?p="+encodeBase64(getSelectedValue())+"&install=1";
	 
	
	}
function formValidation()
{
		   document.getElementById('loaderimage').style.display="block";

 
		//document.getElementById('savediv').style.display="none";
		//document.getElementById('loading').style.display="block";
		//document.getElementById('layerid').style.display="block";		 
		document.getElementById('contentform').submit();
	 
 
}
function pagesaved(){
		document.getElementById('loaderimage').style.display="none";
		document.getElementById('nextflag').value="1";
	}

function nextcheck(next){
		if(document.getElementById('nextflag').value==0){
			alert("Please save draft template first");
		}else{
			window.location=next;
		}
		
	}

var flag = '';
function getPage(appid) {
	//alert(flag);
	document.getElementById('box_132019960211678').style.backgroundColor='#FFFFFF';
	//alert(appid);
	if(flag != '')
	{
	document.getElementById('box_'+flag).style.backgroundColor='#FFFFFF';
	}
	
	
	
	document.getElementById('box_'+appid).style.backgroundColor='#EEEEEE';
	flag = appid;
	document.getElementById("preview").innerHTML=document.getElementById(appid).innerHTML;
	
	////generate the parameter for the php script
//	var data = 'appid=' + appid;
//	$.ajax({
//			url : 'preview.php',
//			dataType : 'html',
//			data: data,
//			success : function(result){
//				 $("#preview").html(result);
//				  
//			}});
}

function imghover(id)
{
var curImg = document.getElementById("img_"+id);
var nwImg = document.getElementById("img1_"+id);

curImg.src = (nwImg.value);
curImg.innerHTML = nwImg.value;
}

function imgnormal(id)
{
	
var curImg = document.getElementById("img_"+id);
var nwImg = document.getElementById("img2_"+id);

curImg.src = (nwImg.value);
curImg.innerHTML = nwImg.value;
}
